O detalhe que mais me incomoda nessa história toda: o Shai-Hulud não explora
nenhuma falha exótica. Ele explora uma feature ligada por padrão que ninguém
escolheu — o npm install rodar código arbitrário via lifecycle script
(postinstall). O worm não "invade" nada: ele só espera você instalar e o
próprio npm executa ele com as suas permissões, no seu shell, com as suas
variáveis de ambiente. O "apertar Y no automático" é só o segundo erro; o
primeiro é o install poder executar qualquer coisa sem você pedir.
Daí dá pra separar a defesa em duas camadas que o artigo encosta mas vale
explicitar:
-
Vetor de EXECUÇÃO. É aqui que mora o estrago. Se o gerenciador não roda
lifecycle script por padrão (e ainda instala dentro de um sandbox), o
postinstall malicioso simplesmente não dispara — mesmo que o pacote
comprometido já esteja no seu node_modules. Isso neutraliza o Shai-Hulud
independente de existir advisory, porque não depende de "conhecer" o worm. -
Vetor de ENTRADA. As duas ondas entraram com token de maintainer roubado e
republish relâmpago (lembra dos 323 pacotes em 22 minutos que você citou).
Sinais como "pacote publicado agora há pouco" e "queda súbita no nº de
maintainers" são exatamente a assinatura disso — não provam malícia, mas
são o tipo de atrito que faz você parar antes do Y.
O que NÃO resolve, pra deixar honesto: lista de CVE (OSV e afins) é inútil
contra worm de dia zero — no momento do ataque não existe advisory nenhum.
Quem vende "bloqueio por CVE" como resposta ao Shai-Hulud está vendendo a
defesa errada. O que importa nesse caso específico é tirar a execução
automática da jogada, não consultar uma blacklist.
Disclosure pra ninguém achar que é pelas costas: eu fui tão incomodado com
isso que acabei construindo um gerenciador de pacotes (Rust, compatível com
npm) que faz exatamente as duas coisas acima — sem lifecycle script por
padrão, sandbox no install e esses avisos de takeover. Tá em v0.x e cheio de
arestas, então não é pitch, é mais um "me digam onde isso quebra":
https://github.com/Matheusagostinho/vaultpm
Mas mesmo quem não usar nada disso: desliga o ignore-scripts mental e para
de apertar Y no automático. O worm conta com a velocidade, não com a
vulnerabilidade.