Quebrando: Os Pacotes npm em que Seus Projetos Confiam Acabaram de se Tornar o Vetor de Ataque
Como duas ondas separadas em setembro de 2025 transformaram bibliotecas JavaScript confiáveis em veículos de roubo de criptomoedas e worms autopropagáveis
Dois bilhões e seiscentos milhões de downloads por semana. Isso não é uma meta. É um raio de explosão. Quando invasores comprometeram a conta de um mantenedor npm confiável em 8 de setembro de 2025, eles não precisaram encontrar um zero-day engenhoso na infraestrutura do npm nem fazer engenharia reversa de uma primitiva criptográfica. Eles enviaram um e-mail de phishing. Alguém clicou. O resto seguiu automaticamente, na velocidade dos pipelines de CI/CD rodando em todos os fusos horários do planeta.
A Onda de 8 de Setembro: Uma Credencial, Dezoito Pacotes, Duas Horas de Exposição
De acordo com a análise detalhada do incidente feita pela Upwind, as primeiras versões maliciosas de pacotes apareceram no npm às 13h16 UTC em 8 de setembro de 2025. Por volta das 15h20 UTC, membros da comunidade identificaram código suspeito e emitiram alertas no GitHub. Os mantenedores reverteram os pacotes comprometidos em menos de duas horas. Essa janela de resposta é genuinamente rápida para um ecossistema gerido pela comunidade — e ainda assim importa menos do que se poderia esperar, porque os pacotes em questão não eram utilitários obscuros. Conforme relatado pela Sweet Security, citando a descoberta inicial da Aikido Security, os pacotes comprometidos respondiam coletivamente por 2,6 bilhões de downloads semanais, tornando este o maior comprometimento do npm da história por essa métrica. Brian Krebs resumiu o alcance de forma concisa: 18 pacotes JavaScript populares, incluindo debug e chalk, foram sequestrados e armadilhados para roubar criptomoedas.
A história do acesso inicial é instrutiva precisamente por ser nada glamourosa. Os invasores não quebraram o npm. Eles comprometeram uma pessoa. A credencial de um único mantenedor obtida por phishing deu a eles a capacidade de publicar versões novas e maliciosas de bibliotecas que estão na base de inúmeras aplicações em produção. A NowSecure destacou que a exposição potencial downstream se estende a aplicações móveis, já que muitos pipelines de desenvolvimento mobile consomem pacotes do mesmo ecossistema npm. O código injetado tinha como alvo carteiras de criptomoedas e transações em blockchain, tornando a motivação financeira imediata e evidente.
A lição estrutural aqui — que todo desenvolvedor e estudante com consciência de segurança deveria absorver — está na matemática das dependências. Segundo dados citados pela análise de segurança npm do cyberdesserts.com, o projeto npm médio puxa 79 dependências transitivas. Você audita suas dependências diretas. Raramente audita as dependências das suas dependências, ou as dependências das dependências das suas dependências. Esse ponto cego recursivo é exatamente com o que os invasores estão contando.
A Onda de 15 de Setembro: Quando o Payload Aprende a Andar
Sete dias depois, os agentes de ameaça retornaram com algo mais ambicioso. De acordo com a pesquisa da Trend Micro, em 15 de setembro, o repositório npm sofreu um segundo ataque contínuo à cadeia de suprimentos, novamente iniciado por meio de uma campanha de phishing direcionada a contas de mantenedores. Essa onda introduziu dois payloads documentados com comportamentos e objetivos significativamente diferentes — e entender essa distinção é útil para quem está construindo um modelo mental de como ataques à cadeia de suprimentos evoluem.
O primeiro payload, chamado Cryptohijacker, desviava ativos de criptomoedas de forma encoberta ao sequestrar APIs web e manipular o tráfego de rede. É financeiramente focado e projetado para operar silenciosamente. A telemetria da Trend Micro confirma que organizações na América do Norte e na Europa estavam entre as mais afetadas pelo Cryptohijacker.
O segundo payload, o worm Shai-Hulud, é uma categoria de preocupação completamente diferente. Também documentado pela Trend Micro, o Shai-Hulud é entregue por meio de pacotes comprometidos, rouba tokens de serviços em nuvem, implanta ferramentas de varredura de segredos e se propaga automaticamente para contas adicionais. Até o momento do relatório da Trend Micro, não havia detecções confirmadas do worm Shai-Hulud em campo — o que é um contexto relevante: a capacidade existe, o mecanismo é compreendido, e os defensores têm uma janela para se preparar.
A equipe de pesquisa de ameaças da Splunk enquadrou o padrão mais amplo com precisão útil: o ataque Shai-Hulud de setembro de 2025 infectou mais de 500 pacotes npm em um comprometimento coordenado da cadeia de suprimentos e, na avaliação deles, marcou um momento divisor de águas na segurança da cadeia de suprimentos, demonstrando técnicas que os defensores agora precisam encarar como parte do arsenal padrão dos adversários. A diferença de escala entre o evento de 8 de setembro (18 pacotes) e a onda de 15 de setembro (mais de 500 pacotes) reflete a velocidade com que os agentes de ameaça iteraram sobre o sucesso inicial.
O Que o Tamanho do Ecossistema npm Torna Possível (e Difícil)
Para entender por que esses eventos têm peso além da comunidade JavaScript, é útil apreciar a escala do ecossistema. A equipe de segurança da Splunk observa que o npm contém mais de 2,5 milhões de pacotes e processa bilhões de downloads semanais, representando o que eles descrevem como um alvo irresistível para invasores que buscam comprometer cadeias de suprimentos de software em escala. A matemática, como a Splunk coloca, é direta: comprometer um único pacote popular pode dar acesso a milhares de aplicações downstream e seus ambientes de produção.
A superfície de ataque vai além das aplicações web. A NowSecure destacou especificamente o impacto potencial sobre aplicações móveis, já que pipelines de desenvolvimento mobile consomem regularmente pacotes npm como dependências de build. Uma ferramenta de build comprometida não precisa chegar diretamente aos usuários finais; ela só precisa tocar o processo de build uma vez.
A análise da Splunk também identifica um mecanismo específico que torna o npm especialmente explorável: lifecycle hooks. Os hooks preinstall, install e postinstall do npm executam código automaticamente durante a instalação de pacotes, sem nenhum prompt ou confirmação do usuário. Um script postinstall malicioso é executado no momento em que um desenvolvedor digita npm install. Isso não é um caso extremo obscuro; é uma funcionalidade padrão do npm que os agentes de ameaça aprenderam a weaponizar de forma confiável.
O Que Isso Significa para Você como Aprendiz e Desenvolvedor
Se você está aprendendo desenvolvimento de software, estudando segurança ou construindo qualquer coisa que envolva JavaScript, essa história é um estudo de caso prático de como o risco no software moderno realmente funciona. O perímetro não é o código da sua aplicação. O perímetro se estende por cada pacote que você instala, cada pacote que esses pacotes instalam, e os humanos que mantêm todos eles.
As lições práticas não são exóticas. Trave as versões das suas dependências usando arquivos package-lock.json ou yarn.lock para que uma nova versão comprometida não entre automaticamente na sua próxima instalação. Audite suas árvores de dependências usando ferramentas como npm audit. Preste atenção quando a comunidade de segurança emitir alertas no GitHub — a resposta de 8 de setembro demonstrou que a velocidade da comunidade pode fazer diferença. E se você mantém pacotes de código aberto, trate suas credenciais de npm publish com a mesma seriedade que o acesso a um banco de dados de produção, porque do ponto de vista de um invasor, elas são equivalentes.
A ausência de detecções confirmadas do worm Shai-Hulud em campo é uma boa notícia real, e reflete tanto a rapidez da resposta da comunidade quanto a preparação ativa dos defensores. A janela para construir melhores hábitos em torno da higiene de dependências está aberta. Os eventos de setembro de 2025 são uma ilustração vívida e bem documentada de por que esses hábitos importam antes de um incidente — não depois.
Fontes
- Major NPM Supply-Chain Attack: Potential Impact on Mobile Applications - NowSecure(opens in new tab)
- Tradecraft Tuesday Recap: axios npm Supply Chain Compromise(opens in new tab)
- What We Know About the NPM Supply Chain Attack | Trend Micro (US)(opens in new tab)
- Defending Against npm Supply Chain Attacks: A Practical Guide to Detection, Emulation, and Analysis | Splunk(opens in new tab)
- npm Security Risks 2026: Vulnerable Packages & Fixes(opens in new tab)
- npm Supply Chain Attack: Massive Compromise of debug, chalk ...(opens in new tab)
- Largest npm Supply-Chain Attack Hits Billions of Downloads | Sweet Security(opens in new tab)
Fontes
- Major NPM Supply-Chain Attack: Potential Impact on Mobile Applications - NowSecure(opens in new tab)
- Tradecraft Tuesday Recap: axios npm Supply Chain Compromise(opens in new tab)
- What We Know About the NPM Supply Chain Attack | Trend Micro (US)(opens in new tab)
- Defending Against npm Supply Chain Attacks: A Practical Guide to Detection, Emulation, and Analysis | Splunk(opens in new tab)
- npm Security Risks 2026: Vulnerable Packages & Fixes(opens in new tab)
- 18 popular JavaScript packages hacked to steal crypto | Brian Krebs posted on the topic | LinkedIn(opens in new tab)
- npm Supply Chain Attack: Massive Compromise of debug, chalk ...(opens in new tab)
- Largest npm Supply-Chain Attack Hits Billions of Downloads | Sweet Security(opens in new tab)
- What We Know About the NPM Supply Chain Attack | Trend Micro (US)(opens in new tab)
- Largest NPM Compromise in History - Supply Chain Attack - Reddit(opens in new tab)