
Na primeira semana de setembro de 2025, a comunidade JavaScript foi surpreendida com o que especialistas já estão chamando de o maior ataque à cadeia de suprimentos da história do ecossistema NPM. Pacotes extremamente populares — incluindo nomes como chalk, debug, color-convert, strip-ansi e supports-color — foram sequestrados por hackers, afetando diretamente bilhões de instalações semanais em projetos no mundo todo.
O Que Aconteceu?
Hackers realizaram um ataque de phishing direcionado a mantenedores de pacotes NPM. Eles enviaram e-mails falsos alegando serem da equipe oficial do NPM, solicitando uma “atualização obrigatória de 2FA”. A mensagem induzia os desenvolvedores a clicarem em um link malicioso hospedado no domínio falso npmjs.help, que imitava o portal legítimo npmjs.com.
Uma vez obtidas as credenciais, os invasores ganharam acesso total à conta do mantenedor e injetaram código malicioso em versões novas dos pacotes.
🦠 Como o Malware Funciona (Passo a Passo)
O código malicioso inserido nos pacotes compromete a segurança de aplicações web que utilizam carteiras de criptomoedas. A seguir, um resumo técnico do seu funcionamento:
1. Injeção no navegador
- O malware se infiltra diretamente no ambiente do navegador.
- Realiza hooks em funções centrais como
fetch,XMLHttpRequeste APIs de carteiras (window.ethereum, Solana, etc.). - Com isso, é capaz de interceptar tanto o tráfego web quanto a atividade de carteiras.
2. Monitoramento de dados sensíveis
- Escaneia respostas de rede e payloads de transações.
- Busca por padrões que correspondam a endereços de carteiras ou transferências de valor.
- Reconhece diversos formatos, incluindo Ethereum, Bitcoin, Solana, Tron, Litecoin e Bitcoin Cash.
3. Reescrita de destinos
- Substitui o endereço legítimo por um endereço controlado pelo atacante.
- Usa endereços com aparência semelhante (“lookalike”) para evitar levantar suspeitas.
4. Sequestro de transações antes da assinatura
- Altera parâmetros críticos de transações Ethereum e Solana (como destinatários, autorizações e permissões).
- Mesmo que a interface de usuário pareça correta, a transação assinada redireciona os fundos ao invasor.
5. Modo furtivo
- Caso detecte uma carteira ativa, evita alterações visíveis na interface para não levantar alertas.
- Mantém hooks silenciosos em segundo plano, prontos para capturar e modificar transações reais conforme necessário.
🔗 A investigação completa está sendo atualizada dinamicamente pela equipe da Aikido:
https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised
Lista de Pacotes Afetados
| Pacote | Downloads/semana |
|---|---|
chalk | 299 milhões |
debug | 357 milhões |
ansi-styles | 371 milhões |
supports-color | 287 milhões |
strip-ansi | 261 milhões |
color-convert | 193 milhões |
wrap-ansi | 197 milhões |
ansi-regex | 243 milhões |
color-name | 191 milhões |
is-arrayish | 73 milhões |
Lições e Recomendações
- Desconfie de e-mails solicitando ações urgentes, mesmo que pareçam legítimos.
- Ative o 2FA com aplicativos confiáveis, como Authy ou Google Authenticator.
- Audite os pacotes utilizados, especialmente os que foram atualizados recentemente.
- Fixe dependências com lockfiles (
package-lock.json,yarn.lock) e verificação de integridade. - Implemente repositórios internos (mirrors) para dependências críticas.
- Use ferramentas de segurança contínua, como
Snyk,Socket.dev,Aikidoounpm audit.
Conclusão
Esse ataque levanta um alerta vermelho sobre a fragilidade operacional, mesmo nos projetos mais populares. Uma única conta comprometida pode escalar rapidamente para bilhões de sistemas afetados — silenciosamente e de forma altamente sofisticada.
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.