O Diário do Analista
Vol. 2 (abr. 2026)  |  Pp. 254–256  |  ISSN 3086-6103

Supply Chain no npm ataca novamente: worm no npm compromete pacotes, credenciais e pipelines CI/CD

Uma nova campanha de supply chain no ecossistema npm, identificada como ChainDrop, está explorando um modelo de propagação automatizada: um pacote comprometido executa código durante a instalação, coleta credenciais de desenvolvimento e CI/CD e usa tokens obtidos para publicar versões maliciosas de outros pacotes. O impacto ainda está em evolução, mas já envolve centenas de pacotes e versões — incluindo componentes amplamente adotados, como keyv, cache-manager, flat-cache e file-entry-cache.microsoft+1

O caso reforça uma conclusão desconfortável para equipes de segurança: o risco não está apenas no código que uma aplicação executa em produção. Ele também está em cada npm install feito por desenvolvedores, runners de CI, imagens base e registries internos.


O Vetor de Ataque: preinstall

As versões comprometidas introduzem um hook de ciclo de vida no package.json:

{
   "scripts": {
      "preinstall": "node setup.mjs"
   }
}

Esse detalhe é central. O preinstall é executado antes de a instalação ser concluída, permitindo que o payload rode em workstations e ambientes de build antes mesmo que testes, scanners convencionais ou validações da aplicação sejam acionados. O loader setup.mjs baixa o runtime Bun e dispara um segundo estágio JavaScript, fortemente ofuscado, associado a arquivos como Math_Symbol.js e math_init.js.

math_init.js / Math_Symbol.js script ofuscado
fonte: BleepingComputer

O comportamento observado segue uma cadeia clara:

  1. Uma versão maliciosa é publicada no npm.

  2. O preinstall executa o dropper durante a instalação.

  3. O payload busca tokens, variáveis de ambiente, chaves e arquivos de configuração.

  4. Credenciais válidas de npm, GitHub, cloud e infraestrutura são verificadas e coletadas.

  5. Tokens com permissão de publicação são usados para baixar tarballs legítimos, inserir o payload, incrementar a versão de patch e republicar pacotes.

  6. Credenciais GitHub também podem ser usadas para introduzir persistência em repositórios, incluindo configurações do Claude Code e do VS Code.

É isso que torna o ChainDrop particularmente perigoso: não se trata só de um pacote adulterado. Trata-se de um worm de supply chain, capaz de transformar privilégios de um único publisher em múltiplos releases comprometidos.


O alvo: credenciais e capacidade de publicação

O payload busca dados em endpoints de desenvolvimento e runners de CI/CD, incluindo tokens npm, tokens GitHub (ghp_, gho_ e ghs_), variáveis de ambiente, chaves SSH, credenciais AWS, secrets de Kubernetes, HashiCorp Vault, Azure, GCP, bancos de dados e ferramentas SaaS. Em ambientes GitHub Actions, o malware também tenta explorar segredos do runner e permissões OIDC disponíveis durante o job.microsoft+1

Além da coleta de secrets, há exfiltração cifrada para infraestrutura controlada pelo atacante e, como mecanismo alternativo, criação de repositórios públicos no GitHub com a descrição Shai-Hulud: Here We Go Again. A infraestrutura de comando e controle também pode ser atualizada por meio de um smart contract na Ethereum, dificultando bloqueios baseados apenas em domínios estáticos


Mitigação

Como mitigação, as equipes devem auditar imediatamente package-lock.json, yarn.lock, pnpm-lock.yaml, caches de dependências e artefatos de CI/CD em busca das versões comprometidas, fixando versões conhecidamente seguras e adotando npm ci para impedir atualizações implícitas durante builds. Ambientes que tenham instalado pacotes afetados devem ser tratados como potencialmente comprometidos: recrie runners e imagens de build, limpe caches compartilhados e rotacione tokens npm, GitHub, cloud, SSH e demais secrets a partir de um host confiável. Para reduzir a superfície futura, atualize o npm CLI para a versão 11.10.0 ou superior, aplique uma idade mínima para releases (min-release-age), restrinja a saída de rede dos runners, use tokens efêmeros e de privilégio mínimo, e avalie desabilitar scripts de ciclo de vida em instalações que não precisem deles com --ignore-scripts


Referências:

Categorias: Alerta, Ataques, CI/CD, Falhas, Github, npm, PackageKit, Packet Manager, Supply Chain, Worm Like.