Prezados, boa tarde.
Nesta segunda-feira, pesquisadores de segurança descobriram o maior ataque à cadeia de suprimentos da história do npm, comprometendo 18 pacotes JavaScript fundamentais, como chalk, debug e ansi-styles, que representam mais de 2,6 bilhões de downloads semanais. Josh Junon (qix), mantenedor desses pacotes críticos do ecossistema JavaScript, teve sua conta npm comprometida através de um ataque de phishing sofisticado.
O ataque iniciou quando Junon recebeu um e-mail fraudulento que ameaçava bloquear contas de mantenedores em 10 de setembro, solicitando atualização das credenciais 2FA para induzir o clique no link malicioso. O próprio Junon confirmou ter caído no golpe, em publicação no fórum HackerNews.
Os atacantes injetaram código malicioso altamente ofuscado nos pacotes, criando um interceptador baseado no navegador projetado para roubar criptomoedas. O malware intercepta transações de carteiras digitais como MetaMask e Phantom, alterando dados antes da assinatura pelos usuários. Ele modifica funções como fetch, XMLHttpRequest e APIs de carteiras, substituindo endereços legítimos por outros controlados pelos atacantes, redirecionando fundos sem conhecimento do usuário.
Pacotes comprometidos: ansi-styles (371 milhões de downloads semanais), debug (357 milhões), chalk (300 milhões) e supports-color (287 milhões). Esses componentes servem como dependências para milhares de aplicações, desde startups até empresas Fortune 500, podendo expor usuários ao roubo de criptomoedas.
A detecção rápida foi crucial para limitar danos. O ataque foi identificado em 5 minutos e divulgado em 1 hora pela Aikido Security. O npm iniciou a remoção de versões maliciosas, embora alguns pacotes permanecessem comprometidos no momento da divulgação. O incidente expõe a fragilidade da cadeia de suprimentos de código aberto, onde uma conta comprometida pode afetar bilhões de instalações globalmente.
Recomendações:
• Avaliar imediatamente a presença de versões comprometidas dos pacotes afetados em seus projetos, investigando logs de instalação recentes e realizando auditoria completa do ambiente.
• Implementar verificação contínua de dependências com ferramentas como npm audit, Snyk ou Socket.dev.
• Estabelecer políticas de cooldown de pelo menos 48 horas antes de atualizar dependências críticas.
• Revisar e fortalecer processos internos de aprovação para atualizações de bibliotecas, tratando mudanças no package-lock.json com rigor equivalente ao código da aplicação.
• Investigar todas as credenciais, chaves e atividades em carteiras digitais para ambientes que utilizam aplicações web3.
• Reforçar controles de autenticação e conscientização sobre phishing.
• Adotar serviços de monitoramento gerenciado da cadeia de suprimentos como os oferecidos pela SEK.
A SEK permanece monitorando a situação e está disponível para auxiliar na implementação de controles de segurança, avaliação de exposição e resposta a comprometimentos de dependências.