Uma sofisticada campanha de malware autopropagável atingiu o ecossistema npm, comprometendo o popular pacote Keyv e se espalhando rapidamente para pelo menos 868 pacotes em mais de 1.380 versões. Pesquisadores de segurança estimam que os pacotes afetados representam mais de dois bilhões de instalações mensais. O ataque começou quando os invasores obtiveram controle da conta do GitHub pertencente ao mantenedor do Keyv (uma biblioteca de armazenamento de chave-valor amplamente utilizada, com aproximadamente 127 milhões de downloads semanais). Usando a identidade comprometida, os atacantes injetaram código malicioso diretamente na branch principal de vários repositórios sob o controle do mesmo mantenedor, incluindo Keyv, cacheable, flat-cache e file-entry-cache. Em seguida, publicaram novas versões dos pacotes por meio de fluxos de trabalho legítimos do GitHub Actions. Como as compilações se originaram dos pipelines oficiais, as versões maliciosas continham atestados de procedência válidos — fazendo com que parecessem totalmente legítimas para verificações automatizadas da cadeia de suprimentos.
Cada pacote comprometido recebeu dois novos arquivos — setup.mjs e Math_Symbol.js — juntamente com uma entrada silenciosa de "preinstall": "node setup.mjs" no arquivo package.json.
Quando um desenvolvedor ou sistema de CI executa o comando `npm install` em uma versão afetada, o gancho de pré-instalação é executado automaticamente. Ele baixa o ambiente de execução JavaScript oficial do Bun e o utiliza para iniciar o payload da segunda etapa. O malware então:
Coleta credenciais de nuvem (AWS, GCP, Azure)
Rouba segredos de infraestrutura, tokens do HashiCorp Vault e tokens de contas de serviço do Kubernetes.
Coleta tokens de autenticação do npm e do GitHub.
Tem como alvo arquivos de configuração relacionados à IA e carteiras de criptomoedas.
Implementa mecanismos de persistência nos diretórios .vscode e .claude para que o payload possa ser acionado novamente quando um desenvolvedor ou agente de codificação de IA abrir o repositório.
Uma vez obtidas as credenciais, o worm as utiliza para se republicar em outros pacotes pertencentes ao mantenedor comprometido ou a contas recém-roubadas, permitindo uma rápida movimentação lateral pelo registro. Pesquisadores da Aikido, Upwind, Wiz, Socket e outros associaram a campanha à família de worms Shai-Hulud (também referida em alguns relatórios como ChainDrop).
O que desenvolvedores e organizações devem fazer imediatamente
Audite os arquivos de bloqueio para as versões maliciosas listadas acima (e quaisquer outras relatadas recentemente).
Fixe versões exatas comprovadamente boas — evite intervalos de acento circunflexo (^) ou til (~).
Recrie os arquivos de bloqueio e limpe os caches locais do npm.
Execute futuras instalações com a opção --ignore-scripts até que a situação se estabilize.
Rotacione todos os segredos potencialmente expostos: tokens npm, PATs do GitHub, credenciais da nuvem, tokens do Vault, segredos de CI e quaisquer credenciais de agentes de IA.
Analise as estações de trabalho dos desenvolvedores e os executores de CI em busca da presença de arquivos setup.mjs, Math_Symbol.js ou arquivos inesperados nos diretórios .vscode / .claude.
Considere comprometida qualquer máquina que tenha instalado uma versão maliciosa, mesmo que o pacote já tenha sido removido.
A versão maliciosa Keyv 6.0.0 ficou ativa por apenas algumas horas antes de ser revertida, mas a capacidade do worm de se autopropagar significa que a janela de exposição foi significativamente maior para dependências transitivas. Este incidente destaca mais uma vez a fragilidade da cadeia de suprimentos de código aberto. Mesmo pacotes com procedência válida e milhões de downloads semanais podem se tornar vetores quando uma única conta de mantenedor é comprometida. Mantenha-se vigilante, fixe suas dependências com segurança e acompanhe os avisos oficiais da Aikido, Socket, Wiz, Upwind e da equipe de segurança do npm para obter as atualizações mais recentes.








