No início de setembro de 2025, o ecossistema JavaScript enfrentou um dos maiores alertas de segurança de sua história: um ataque à cadeia de suprimentos do NPM que comprometeu pacotes populares com bilhões de downloads semanais. Esse incidente, ocorrido em 8 de setembro, expôs a vulnerabilidade de dependências amplamente usadas, como chalk, debug e ansi-styles, afetando potencialmente milhões de desenvolvedores e aplicações ao redor do mundo. Hackers usaram técnicas sofisticadas de phishing para invadir contas de mantenedores, injetando código malicioso que visa roubar criptomoedas. Este artigo explora o que aconteceu, como o ataque funcionou e como se proteger, com base em análises atualizadas e lições práticas para a comunidade de desenvolvimento.
O Que Foi o Ataque ao NPM em Setembro de 2025?
O alerta NPM começou quando hackers comprometeram contas de mantenedores chave no repositório oficial do Node Package Manager (NPM), o gerenciador de pacotes mais usado para JavaScript e Node.js. Em 8 de setembro de 2025, por volta das 9h (horário do Leste dos EUA), um desenvolvedor conhecido como Qix (Josh Junon) foi alvo de um e-mail de phishing falso, enviado de um domínio imitador como “support@npmjs.help”. O e-mail criava urgência falsa, alegando a necessidade de atualizar a autenticação de dois fatores (2FA) antes de 10 de setembro, sob ameaça de bloqueio da conta.
Ao clicar no link malicioso, o mantenedor foi redirecionado para uma página falsa que capturou suas credenciais, incluindo o código 2FA em tempo real — uma técnica chamada de “adversary-in-the-middle” (AitM). Com acesso total, os atacantes publicaram versões maliciosas de pelo menos 18 pacotes mantidos por Qix, e possivelmente mais, incluindo variantes em outros mantenedores como duckdb_admin. Esses pacotes, essenciais para formatação de texto, depuração e estilos em terminais, são baixados bilhões de vezes por semana.
A detecção rápida veio da empresa de segurança Aikido, que alertou a comunidade às 15:15 UTC via Bluesky. O mantenedor confirmou o incidente publicamente e iniciou a remoção das versões afetadas, que foram retiradas do NPM em poucas horas — cerca de duas horas de exposição total. Apesar da rapidez, relatórios da Wiz indicam que o código malicioso alcançou cerca de 10% dos ambientes em nuvem que usam esses pacotes, destacando a velocidade de propagação em cadeias de suprimentos de software.
Esse não é um caso isolado. De acordo com o Relatório de Segurança de Cadeia de Suprimentos de Software 2025 da ReversingLabs, 14 de 23 campanhas maliciosas relacionadas a cripto em 2024 miraram o NPM, mostrando um padrão crescente de ataques a repositórios open-source. O impacto potencial é enorme: aplicações web, ferramentas de desenvolvimento e até apps móveis que integram esses pacotes poderiam ser afetadas, especialmente aquelas lidando com carteiras de criptomoedas.
Linha do Tempo do Incidente
Para entender melhor a escala, aqui vai uma linha do tempo baseada em relatórios de fontes como Vercel, Sonatype e Palo Alto Networks:
- 5 de setembro de 2025: Registro do domínio falso npmjs.help, preparando o phishing.
- 8 de setembro, 9h EST: Comprometimento da conta de Qix via phishing; publicação de versões maliciosas (ex.: chalk@5.6.1, debug@4.4.2).
- 13:16 UTC: Aikido detecta o código malicioso em 18 pacotes.
- 15:15 UTC: Alerta público via Bluesky; mantenedor inicia limpeza.
- 16:58 UTC: Detecção de pacote adicional (proto-tinker-wc@0.1.87) com malware similar.
- 9 de setembro: Extensão do ataque a pacotes DuckDB; Sonatype identifica mais quatro pacotes afetados.
- 11 de setembro: Versões maliciosas removidas completamente; npm emite alertas oficiais.
Essa sequência demonstra como um ataque pode escalar rapidamente, mas também a resiliência da comunidade open-source.
Pacotes Afetados e Seu Alcance Massivo
Os pacotes comprometidos são fundamentais para o desenvolvimento JavaScript, usados em bibliotecas como React, Node.js e ferramentas de CLI. Coletivamente, eles somam mais de 2,6 bilhões de downloads semanais, o que significa que uma fração mínima de adoção já impacta milhões de projetos. Aqui está uma lista atualizada dos principais afetados, com dados de downloads semanais aproximados (baseados em métricas do NPM e análises da Wiz e Aikido):
| Pacote | Versão Comprometida | Downloads Semanais (milhões) | Uso Comum |
|---|---|---|---|
| debug | 4.4.2 | 357 | Depuração de apps Node.js |
| ansi-styles | 6.2.2 | 371 | Estilos de terminal |
| chalk | 5.6.1 | 300 | Formatação de cores em logs |
| supports-color | 10.2.1 | 287 | Detecção de suporte a cores |
| strip-ansi | 7.1.1 | 261 | Remoção de códigos ANSI |
| ansi-regex | 6.2.1 | 244 | Regex para ANSI |
| wrap-ansi | 9.0.1 | 198 | Quebra de linhas em terminais |
| color-convert | 3.1.1 | 194 | Conversão de cores |
| color-name | 2.0.1 | 192 | Nomes de cores |
| slice-ansi | 7.1.1 | 60 | Fatiamento de texto ANSI |
| is-arrayish | 0.3.3 | 74 | Verificação de arrays |
| error-ex | 1.3.3 | 47 | Tratamento de erros |
| color-string | 2.1.1 | 27 | Strings de cores |
| simple-swizzle | 0.2.3 | 26 | Mistura de valores |
| has-ansi | 6.0.1 | 12 | Detecção de ANSI |
| supports-hyperlinks | 4.1.1 | 19 | Suporte a hyperlinks |
| chalk-template | 1.1.1 | 4 | Templates com chalk |
| backslash | 0.2.1 | 0.26 | Manipulação de backslashes |
Outros pacotes identificados posteriormente incluem variantes de DuckDB (como @duckdb/node-api@1.3.3) e proto-tinker-wc. Nem todos os mantenedores foram afetados igualmente; alguns, como simple-swizzle, demoraram mais para serem corrigidos. O risco é maior para projetos que atualizam dependências automaticamente, como em pipelines CI/CD.
Como o Malware Funciona: Uma Análise Técnica Detalhada
O código injetado era um malware sofisticado, focado em roubo de criptomoedas via navegador. Diferente de malwares tradicionais que executam no servidor, esse atuava no lado do cliente (browser), tornando-o furtivo e difícil de detectar em scans estáticos. De acordo com a deobfuscação feita pela Wiz e Aikido, o malware usava ofuscação para esconder sua lógica, mas uma vez decifrado, revelava um interceptor de transações blockchain.
Passo a Passo do Funcionamento do Malware
- Injeção no Ambiente do Navegador
Ao carregar uma aplicação com o pacote comprometido, o malware se integra silenciosamente ao navegador. Ele “hooka” funções essenciais comofetch(),XMLHttpRequeste APIs de carteiras Web3, comowindow.ethereum(para MetaMask) e APIs da Solana. Isso permite interceptar todo o tráfego de rede e interações com carteiras sem alterar o código visível da aplicação. - Monitoramento de Dados Sensíveis
O código escaneia respostas de rede e payloads de transações em busca de padrões de criptomoedas. Ele reconhece endereços e transferências em múltiplos formatos: Ethereum (ETH), Bitcoin (BTC), Solana (SOL), Tron (TRX), Litecoin (LTC) e Bitcoin Cash (BCH). Por exemplo, ele procura por strings como “0x…” para ETH ou “bc1…” para BTC SegWit. Essa varredura ocorre em tempo real, sem impactar o desempenho perceptível. - Reescrita de Destinos de Transações
Ao detectar uma transação válida, o malware substitui o endereço destinatário legítimo por um controlado pelos atacantes. Para evitar alertas, usa “endereços lookalike” — similares o suficiente para passar despercebidos (ex.: trocando caracteres visuais como ‘0’ por ‘O’). Isso é feito via manipulação de strings, garantindo que a interface do usuário (UI) pareça inalterada. - Sequestro Antes da Assinatura
Para transações em Ethereum e Solana, o malware altera parâmetros críticos no momento pré-assinatura, como o campoto(destinatário),value(valor) oudata(dados da transação, incluindo aprovações de contratos inteligentes). Mesmo que o usuário veja e assine uma transação “normal” na carteira, os fundos são redirecionados. Isso explora a confiança nas APIs de carteiras, comum em dApps (aplicações descentralizadas). - Modo Furtivo e Persistência
Se uma carteira ativa for detectada, o malware ativa um modo stealth: evita mudanças visíveis na UI e opera em background com hooks silenciosos. Ele só age em transações reais, minimizando logs ou alertas de segurança. Além disso, inclui listas hardcoded de endereços dos atacantes, como 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976 para ETH, e se comunica com servidores C&C (ex.: static-mw-host.b-cdn.net) para atualizações.
Esse design faz do malware um “drainer de carteiras” avançado, similar a campanhas vistas em 2024, mas escalado para pacotes de alto perfil. Relatórios da Sonatype (sonatype-2025-003716) confirmam que o código era idêntico em pacotes adicionais, indicando um ator coordenado.
Impacto Potencial no Ecossistema
Embora o tempo de exposição tenha sido curto (cerca de 2 horas), o risco foi alto para usuários de cripto. A Vercel relatou 70 equipes afetadas em 76 projetos, mas sem perdas financeiras confirmadas até 14 de setembro de 2025. A Wiz estima que 99% dos ambientes em nuvem usam esses pacotes, com 10% possivelmente infectados. No blockchain, análises on-chain mostram poucas transações suspeitas — apenas centavos roubados, graças à detecção rápida. No entanto, o custo indireto é bilionário: horas de engenharia em remediação e contratos de segurança impulsionados pelo pânico.
Para apps móveis (via React Native ou Electron), o impacto poderia se estender a dispositivos iOS e Android, onde integrações Web3 são comuns. A NowSecure alerta que bilhões de dispositivos poderiam ser afetados indiretamente.
Lições Aprendidas e o Contexto Maior de Ataques à Cadeia de Suprimentos
Esse alerta NPM reforça a fragilidade das cadeias de suprimentos open-source. Ataques semelhantes, como o XZ Utils em 2024 (que quase comprometeu o Linux) ou o SolarWinds em 2020, mostram que um único ponto fraco pode cascatear globalmente. Em 2025, com o crescimento de IA e Web3, os riscos aumentaram: relatórios da Palo Alto Networks indicam que 18.000 pacotes maliciosos foram detectados no primeiro trimestre.
A comunidade open-source demonstrou resiliência: a resposta rápida evitou um desastre maior, com experts como Melissa Bischoping (Tanium) acalmando o pânico, notando que as chances de impacto real eram “quase zero” devido ao horário (manhã de segunda-feira nos EUA). Ainda assim, o incidente destaca a necessidade de governança melhor no NPM, como assinaturas obrigatórias de pacotes — uma prática comum em distribuições Linux, mas ausente no NPM.
Recomendações Práticas para Prevenir e Responder a Comprometimentos
Proteger-se de alertas NPM como esse exige uma abordagem em camadas. Aqui vão práticas atualizadas para 2025, baseadas em guias da Qualys, Endor Labs e Medium:
Medidas Imediatas para Desenvolvedores e Mantenedores
- Verifique E-mails de Segurança: Nunca clique em links de e-mails sobre 2FA ou contas. Acesse npmjs.com diretamente. Use passkeys (chaves de passe) para autenticação unphishable.
- Audite Dependências: Rode
npm auditregularmente e verifique lockfiles (package-lock.json) para versões específicas. Evite atualizações automáticas; fixe versões seguras. - Ignore Scripts Suspeitos: Use
npm install --ignore-scriptspara pacotes não confiáveis, prevenindo execução de postinstall maliciosos. - Monitore Transações: Em apps Web3, implemente verificações duplas de endereços antes de assinar. Use ferramentas como o SEAL Framework para validar.
Estratégias de Longo Prazo para Equipes
- Use Ferramentas de Análise de Software (SCA): Integre Snyk, Socket.dev, Aikido ou Sonatype para scans contínuos. Elas detectam malware em runtime, além de manifests.
- Adote SBOMs (Software Bill of Materials): Gere listas de componentes para rastrear dependências. Ferramentas como Cortex Cloud (Palo Alto) flagram riscos operacionais.
- Lockfiles e Repositórios Internos: Sempre use lockfiles para reproducibilidade. Crie mirrors internos para pacotes críticos, evitando downloads diretos do NPM.
- 2FA e Governança: Ative 2FA com apps como Authy ou hardware (YubiKey). Para mantenedores, adote co-maintenance e assinaturas de código.
- Detecção em Runtime: Monitore por comportamentos anômalos, como hooks em fetch ou chamadas a domínios suspeitos (ex.: b-cdn.net). Use Qualys TruRisk para priorizar alertas.
- Políticas Organizacionais: Desenvolva planos de comunicação para incidentes, incluindo notificações a stakeholders. Treine equipes em phishing e supply chain risks.
Melhores Práticas Avançadas para 2025
- Assinaturas e Verificação: Defenda pacotes assinados digitalmente; o NPM planeja implementar isso em atualizações futuras.
- IA para Detecção: Ferramentas com ML, como Vulert, spotam padrões de ofuscação ou typosquatting (pacotes falsos como “crossenv”).
- Abordagem Defense-in-Depth: Combine higiene (blocklists) com resiliência (sandboxing de dependências). Para mobile, escaneie com NowSecure.
- Comunidade e Relatórios: Participe de fóruns como GitHub Issues (ex.: chalk#656) e reporte a OSV.dev para CVEs.
Implementar essas medidas reduz o risco em até 90%, segundo a Cycode. Lembre-se: a segurança não é só no seu código, mas em toda a cadeia.
Conclusão: Fortalecendo o Ecossistema para o Futuro
O alerta NPM de setembro de 2025 foi um lembrete doloroso de que a confiança cega em dependências open-source pode custar caro. Apesar do impacto limitado graças à resposta coletiva, ele expõe a necessidade urgente de inovações como passkeys, scans pré-publicação e governança comunitária. Desenvolvedores, equipes de segurança e empresas devem priorizar a vigilância: audite, proteja e colabore. Com práticas proativas, podemos mitigar esses riscos e manter o NPM como um pilar inovador, não uma porta de entrada para ameaças. A segurança de sua aplicação não está apenas no seu código — mas também em tudo o que você importa via npm install.
Com informações de Aikido Security.

