Ataque ao npm injeta malware no Axios e expõe milhares de projetos JavaScript

Duas versões maliciosas da biblioteca Axios foram publicadas no repositório npm durante a madrugada, carregando um trojan de acesso remoto multiplataforma. Embora tenham ficado disponíveis por cerca de três horas antes da remoção, o tempo foi suficiente para potencialmente comprometer máquinas de desenvolvedores e pipelines de CI/CD, considerando o alto volume de downloads da biblioteca.

O ataque começou com o comprometimento da conta do mantenedor principal do projeto, permitindo que invasores publicassem versões adulteradas diretamente no npm. Eles utilizaram um token de acesso antigo e persistente — diferente do modelo mais seguro baseado em tokens temporários via GitHub Actions — para inserir os pacotes fora do fluxo oficial de publicação. A ausência de validações como o mecanismo “trusted publisher” e a falta de correspondência com commits no GitHub evidenciaram que as versões eram ilegítimas.

Em menos de 40 minutos, duas versões foram comprometidas: uma na linha principal e outra na versão legada da biblioteca, ampliando drasticamente o alcance do ataque. Mesmo assim, o código original do Axios não foi alterado. A infecção aconteceu por meio de uma única modificação no arquivo package.json, que adicionou uma dependência maliciosa chamada plain-crypto-js.

Esse pacote foi criado como uma cópia quase idêntica de uma biblioteca legítima, com o objetivo de não levantar suspeitas. Inicialmente publicado sem código malicioso, ele ganhou uma versão armada horas depois, incluindo um script oculto que era executado automaticamente durante a instalação. Esse script atuava como um “dropper”, identificando o sistema operacional da vítima e baixando o malware apropriado para macOS, Windows ou Linux.

No macOS, o código malicioso se disfarçava como arquivos do sistema; no Windows, criava versões persistentes de ferramentas como o PowerShell; e no Linux, executava scripts em segundo plano via curl. Em todos os casos, o processo era silencioso — falhas eram ignoradas e a instalação parecia normal para o desenvolvedor.

Após a execução, o malware ainda apagava seus próprios rastros, substituindo arquivos modificados por versões limpas e mascarando a versão instalada do pacote. Isso dificultava a detecção, já que ferramentas comuns exibiriam uma versão aparentemente segura.

Análises conduzidas pela StepSecurity mostraram que o malware iniciava comunicação com servidores dos atacantes em pouco mais de um segundo após a instalação. Em seguida, um segundo estágio do ataque era ativado, já operando de forma independente e persistente no sistema.

O nível de sofisticação chamou atenção da comunidade de segurança. O ataque envolveu preparação prévia para evitar detecção, infraestrutura pronta para múltiplos sistemas operacionais, execução silenciosa e técnicas de ocultação avançadas. Até o momento, não há atribuição oficial para os responsáveis.

Para quem pode ter sido afetado, a recomendação é verificar arquivos de lock do projeto em busca das versões comprometidas e investigar possíveis sinais de infecção no sistema. Caso haja qualquer indício, a orientação é reconstruir o ambiente a partir de uma base limpa e rotacionar imediatamente todas as credenciais, incluindo tokens, chaves de API e acessos de CI/CD.

Já como medida preventiva, especialistas recomendam fixar versões seguras da biblioteca e desativar a execução automática de scripts durante instalações, reduzindo a superfície de ataque em projetos que dependem do ecossistema npm.