Verme no npm compromete pacotes keyv e cacheable e se espalha por milhares de versões
Em 4/8, atacantes publicaram versões maliciosas de bibliotecas Node.js com downloads somados na casa dos bilhões; o malware rouba tokens e republica pacotes.
Em 4 de agosto de 2026, a Microsoft Threat Intelligence identificou um ataque em larga escala à cadeia de suprimentos do npm, o registro de pacotes do Node.js. Segundo o relatório da Microsoft, mais de 400 pacotes de publicadores distintos, entre eles bibliotecas de cache como keyv, flat-cache e cache-manager, receberam versões maliciosas com uma variante do verme Mini Shai-Hulud batizada de ChainDrop. O malware rouba credenciais de desenvolvedores e de pipelines de integração contínua e, com tokens de publicação do npm, republica pacotes envenenados. Não há CVE associada: a entrada inicial veio de contas e tokens comprometidos, e não de uma falha de software.
Como o ataque funciona
As versões maliciosas acrescentavam um script preinstall que executava um arquivo setup.mjs antes de a instalação terminar. Esse carregador trazia um pacote JavaScript ofuscado rodando sobre o runtime Bun. Em estações de desenvolvimento e em agentes de CI/CD, o payload vasculhava arquivos e variáveis de ambiente em busca de tokens do npm, do GitHub, de nuvens (como AWS), do Kubernetes e do HashiCorp Vault, enviava os dados cifrados a um servidor controlado pelos atacantes e usava o GitHub como canal de reserva, criando repositórios públicos com a descrição “Shai-Hulud: Here We Go Again”.
A Agência de Cibersegurança de Singapura (CSA) publicou em 6 de agosto um alerta listando versões comprometidas, entre elas keyv 6.0.0, flat-cache 6.1.24 e cache-manager 7.2.10, e citando mais de 1.300 versões de pacotes no registro, com downloads mensais somados na casa dos 2 bilhões — número que mede a popularidade das bibliotecas, não a quantidade de máquinas infectadas. A Deepwatch descreve o início da campanha como comprometimento da conta GitHub do mantenedor principal do ecossistema keyv/cacheable: o código malicioso foi enviado ao ramo principal e o fluxo oficial do GitHub Actions publicou o pacote no npm com atestação OIDC e SLSA válidas, o que mostra que a assinatura de proveniência não impede um commit feito por uma identidade autenticada e já comprometida.
O que fazer
- Procurar nas árvores de dependência e nos lockfiles as versões comprometidas listadas pela CSA e pela Microsoft; fixar versões conhecidas como boas anteriores a 4 de agosto.
- Tratar estações e runners de CI que instalaram essas versões como potencialmente comprometidos: limpar caches do npm/yarn, reconstruir a partir de fontes confiáveis e trocar tokens do npm, do GitHub, chaves de nuvem e segredos acessíveis ao ambiente.
- Antes de revogar tokens do GitHub, a Deepwatch recomenda remover os artefatos de persistência do “dead-man’s switch” (
gh-token-monitorno macOS e no Linux), para evitar a execução de um payload destrutivo quando o token for invalidado. - Desativar scripts de ciclo de vida do npm em CI e em estações de desenvolvimento quando possível, e revisar o uso de tokens de publicação de longa duração.
A urgência vem da capacidade de se espalhar sozinho e do alcance das bibliotecas afetadas, não de uma nota CVSS. Quem instalou uma versão comprometida com scripts de instalação ativos precisa assumir que as credenciais daquele ambiente podem ter vazado.
Fontes
- Microsoft Threat Intelligence — ChainDrop supply chain compromise: Anatomy of a self-propagating worm (04/08/2026)
- Cyber Security Agency of Singapore — Ongoing npm Supply Chain Attack Affecting Keyv and Related Packages (“Shai-Hulud” Worm) (06/08/2026)
- Deepwatch — CA-26-030: Supply Chain Compromise Involving keyv, cacheable, and Associated npm Packages (04/08/2026)
Imagem destacada: ilustração gerada por computador, sem valor documental.


