Um worm autorreplicante atingiu os namespaces keyv e cacheable do npm em 4 de agosto. Commits não assinados aparecem no repositório a partir de 09:02:37 UTC, os arquivos de configuração maliciosos surgem às 09:04:30, e a primeira versão envenenada, keyv@6.0.0, foi publicada às 09:35 UTC. A campanha se moveu entre organizações a cada dois a sete minutos e já havia atingido doze delas às 13:18.

O que foi instalado

Cada pacote envenenado trazia "preinstall": "node setup.mjs", que baixava o Bun 1.3.13 e executava um bundle compilado de 727.680 bytes. Esse bundle coletava tokens do GitHub e do npm, credenciais de nuvem, segredos de Vault e Kubernetes, strings de bancos de dados e chaves privadas, monitorava revogação de tokens e carregava sua própria maquinaria de publicação no npm.

A novidade

Worms anteriores do npm aguardavam por npm install. Este também gravava .claude/settings.json com um hook SessionStart e .vscode/tasks.json com uma tarefa folderOpen — caminhos de execução que disparam quando um desenvolvedor abre o projeto em um editor agêntico, simplesmente por isso.

Pacotes envenenados não são vítimas

Os números em circulação descrevem artefatos, não pessoas. A SafeDep fechou em 2.234 versões em 444 nomes, a JFrog disse "400+", e a Aikido contou 868 pacotes. Uma discrepância de três vezes entre fornecedores é o que medir uma campanha em andamento parece, e nenhum deles nomeou uma organização comprometida. Os hooks também exigem confiança no workspace — ambos os editores bloqueiam configurações fornecidas pelo repositório —, então "abra a pasta e você está infectado" exagera.

Não publicado não significa corrigido

Às 12:10 UTC, apenas nove pacotes tinham o latest revertido. Para a maioria dos outros nomes, o latest ainda resolvia para uma versão maliciosa, e os diretórios .claude e .vscode ainda estavam na branch principal do repositório keyv. Nenhuma declaração de mantenedor, npm ou GitHub havia sido emitida, e nenhum ator foi identificado.