TL;DR
Em 31 de março de 2026, invasores comprometeram a conta npm do mantenedor principal do Axios, o cliente HTTP JavaScript mais popular com 83 milhões de downloads semanais. Eles publicaram versões maliciosas (1.14.1 e 0.30.4) contendo um RAT (Cavalo de Troia de Acesso Remoto) multiplataforma que rouba credenciais, chaves SSH e tokens de nuvem de máquinas de desenvolvedores. Faça downgrade para o Axios 1.14.0 imediatamente, rotacione todos os segredos e escaneie seu sistema em busca de indicadores de comprometimento.
Introdução
Axios processa mais requisições HTTP do que qualquer outra biblioteca JavaScript. Se você construiu um cliente de API, testou endpoints ou conectou um frontend a um backend nos últimos cinco anos, provavelmente o utilizou.
Em 31 de março de 2026, às 00:21 UTC, um ator de ameaças publicou a versão 1.14.1 do Axios através de uma conta de mantenedor sequestrada. O pacote parecia idêntico ao lançamento legítimo. A diferença foi cirúrgica: apenas o package.json mudou entre 86 arquivos. Mas esse único arquivo injetou uma dependência fantasma chamada plain-crypto-js que implantou um trojan de acesso remoto em toda máquina que executou npm install.
As versões maliciosas permaneceram ativas por aproximadamente duas a três horas antes que o npm as retirasse. Duas a três horas em meio a 83 milhões de downloads semanais.
Este artigo detalha como o ataque funcionou, como detectar se seus sistemas foram comprometidos e o que as equipes de API devem mudar em relação à sua gestão de dependências daqui para frente.
Como o ataque à cadeia de suprimentos do Axios se desenrolou
A linha do tempo
O atacante executou esta operação com precisão em um período de 18 horas:
- 30 de março, 05:57 UTC: Um pacote isca "limpo"
plain-crypto-js@4.2.0foi publicado no npm. Publicar uma versão "limpa" primeiro deu ao pacote um breve histórico no registro, fazendo-o parecer menos suspeito. - 30 de março, 23:59 UTC: A versão maliciosa
plain-crypto-js@4.2.1foi publicada, adicionando um hookpostinstallcontendo o dropper. - 31 de março, 00:21 UTC:
axios@1.14.1foi lançado usando a conta comprometidajasonsaayman. - 31 de março, 01:00 UTC:
axios@0.30.4seguiu 39 minutos depois, visando projetos fixados no branch 0.x. - 31 de março, ~03:15 UTC: npm retirou ambas as versões do Axios após relatos da comunidade.
- 31 de março, 04:26 UTC: npm publicou um stub de segurança para
plain-crypto-jspara evitar a republicação.
Como a conta foi comprometida
O atacante assumiu o controle da conta npm jasonsaayman, o principal mantenedor do Axios. Eles mudaram o e-mail registrado para ifstap@proton.me. A principal evidência forense:
- Os lançamentos legítimos do Axios usam GitHub Actions com o mecanismo OIDC Trusted Publisher do npm. As versões maliciosas não possuíam ligação OIDC.
- Nenhum campo
gitHeadapareceu nos lançamentos comprometidos, o que significa que não existiam commits correspondentes no GitHub. - O atacante usou tokens de acesso npm de longa duração roubados para publicar manualmente em vez de passar por CI/CD.
Essa distinção é importante. Se sua organização publica pacotes npm, a ausência de ligação OIDC e proveniência de CI/CD em um lançamento é um sinal de alerta que vale a pena automatizar verificações.
A técnica de injeção de dependência
Eis o que tornou este ataque sutil. O atacante não modificou o código-fonte do Axios. Eles mudaram uma linha em package.json para adicionar plain-crypto-js@^4.2.1 como uma dependência em tempo de execução. Este pacote nunca foi importado em nenhum lugar da base de código do Axios. Ele existia apenas para acionar seu hook postinstall durante o npm install.
A análise binária confirmou a precisão cirúrgica: apenas o package.json diferia entre o lançamento limpo 1.14.0 e o comprometido 1.14.1 em todos os 86 arquivos do pacote.
O que o payload malicioso faz
O mecanismo do dropper
O hook postinstall em plain-crypto-js executou um arquivo ofuscado de 4.2 KB chamado setup.js. Ele usou duas camadas de ofuscação:
- Camada 1: Cifra XOR usando uma chave derivada da string
"OrDeR_7077" - Camada 2: Codificação Base64 com reversão de caracteres
Uma vez decodificado, o dropper identificou o sistema operacional do host e executou payloads específicos da plataforma.
Caminhos de ataque específicos da plataforma
macOS:
Escreve AppleScript em /tmp/6202033
Executa via osascript
Baixa o payload para /Library/Caches/com.apple.act.mond
Windows:
Copia PowerShell para %PROGRAMDATA%\wt.exe (artefato de persistência)
Executa o dropper VBScript via cscript
Linux:
Baixa o RAT Python para /tmp/ld.py
Executa via nohup python3
Todos os três ramos contataram um servidor de comando e controle com corpos POST específicos da plataforma:
- macOS:
packages.npm.org/product0 - Windows:
packages.npm.org/product1 - Linux:
packages.npm.org/product2
Capacidades do RAT
O trojan de acesso remoto implantado suporta:
- Execução arbitrária de comandos shell
- Enumeração e exfiltração do sistema de arquivos
- Listagem e injeção de processos
- Injeção binária em memória (execução sem arquivo)
- Intervalos de beacon de 60 segundos para a infraestrutura C2
Em termos simples: o atacante obtém controle remoto total de sua máquina de desenvolvimento. Eles podem ler seus arquivos .env, roubar suas chaves de API, copiar suas chaves SSH e coletar tokens de provedores de nuvem.
Anti-forense: o payload autolimpante
Após a execução, o dropper realizou três etapas de limpeza:
- Excluiu o próprio
setup.js - Excluiu o
package.jsonmalicioso - Renomeou um
package.mdpré-configurado (relatando a versão 4.2.0) parapackage.json
Isso criou uma camada de engano onde npm list relataria a versão 4.2.0 em vez da 4.2.1 que executou o payload. Um desenvolvedor verificando suas dependências depois não veria nada de errado.
Quem está por trás deste ataque
O Google Threat Intelligence Group atribuiu o ataque ao Axios ao UNC1069, um ator de ameaças suspeito da Coreia do Norte. O malware para macOS exibe "sobreposição significativa" com WAVESHAPER, um backdoor C++ que a Mandiant rastreou em fevereiro de 2026.
Grupos norte-coreanos patrocinados pelo Estado têm vasta experiência com ataques à cadeia de suprimentos. Historicamente, eles usaram ferramentas de desenvolvimento comprometidas para roubar criptomoedas, e esta operação segue o mesmo manual: comprometer uma ferramenta de desenvolvimento amplamente utilizada para obter acesso a credenciais e infraestrutura de nuvem em milhares de organizações.
O nível de sofisticação é notável. A injeção de dependência em dois estágios, a implantação de RAT multiplataforma e a limpeza anti-forense apontam para uma operação bem-recursos. Não é um script kiddie lançando um cryptominer. É uma operação de inteligência visando estações de trabalho de desenvolvedores.
Como verificar se você foi afetado
Passo 1: Verifique sua versão do Axios
Execute isso em cada projeto que usa Axios:
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
Se isso retornar resultados, seu projeto instalou uma versão comprometida.
Passo 2: Verifique a dependência maliciosa
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENCIALMENTE AFETADO"
Mesmo que o dropper tenha se limpado, a existência do diretório confirma que o payload foi executado.
Passo 3: Verifique artefatos do RAT em seu sistema
macOS:
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null
Linux:
ls -la /tmp/ld.py 2>/dev/null
Windows (PowerShell):
Test-Path "$env:PROGRAMDATA\wt.exe"
Passo 4: Verifique indicadores de rede
Bloqueie e escaneie por conexões para:
- Domínio C2:
sfrclak.com - IP C2:
142.11.206.73 - URL C2:
http://sfrclak.com:8000/6202033
Passo 5: Verifique logs de build de CI/CD
Revise quaisquer execuções de pipeline de CI/CD entre 31 de março 00:21 UTC e 03:15 UTC. Qualquer execução de npm install ou npm ci durante esta janela que resolveu Axios pode ter executado o dropper em seu ambiente de build.
Etapas de remediação imediata
Se você encontrar quaisquer indicadores de comprometimento, trate o sistema afetado como totalmente comprometido. Aqui está a lista de prioridades:
1. Faça downgrade do Axios imediatamente
npm install axios@1.14.0
Ou para o branch 0.x:
npm install axios@0.30.3
2. Adicione substituições de versão ao seu package.json
Evite a resolução transitiva para versões maliciosas:
{
"overrides": {
"axios": "1.14.0"
}
}
Para Yarn:
{
"resolutions": {
"axios": "1.14.0"
}
}
3. Remova o pacote malicioso
rm -rf node_modules/plain-crypto-js
4. Rotacione todas as credenciais
Se o dropper executou em sua máquina, assuma que os seguintes foram comprometidos:
- Tokens npm
- Credenciais AWS/GCP/Azure
- Chaves SSH
- Tokens GitHub
- Chaves de API em arquivos
.env - Credenciais de banco de dados
- Quaisquer segredos armazenados em variáveis de ambiente
Rotacione tudo. Não há como saber o que o RAT exfiltrou durante sua janela ativa.
5. Bloqueie C2 no nível da rede
Adicione ao seu arquivo hosts ou regras de firewall:
echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts
6. Se artefatos forem encontrados, reconstrua a máquina
Um RAT com execução de shell e acesso ao sistema de arquivos pode modificar qualquer coisa. Se você encontrou artefatos do Passo 3, não confie no sistema. Reconstrua a partir de um estado conhecido como bom.
Defesas de longo prazo para equipes de desenvolvimento de API
Use lockfiles e fixe versões exatas
O ataque ao Axios explorou faixas semânticas (semver) com ^. Se seu package.json diz "axios": "^1.14.0", o npm resolve para a versão compatível mais recente, que era 1.14.1 durante a janela de ataque.
{
"dependencies": {
"axios": "1.14.0"
}
}
Fixe versões exatas. Sempre commit o seu package-lock.json ou yarn.lock. Execute npm ci em vez de npm install no CI/CD para impor a resolução do lockfile.
Desative scripts postinstall no CI/CD
Todo o ataque dependeu da execução de hooks postinstall durante o npm install. Você pode desabilitar isso:
npm ci --ignore-scripts
Isso quebra alguns pacotes que precisam de compilação nativa. Teste suas compilações primeiro e, em seguida, permita seletivamente scripts para pacotes que os necessitam usando .npmrc:
ignore-scripts=true
Audite dependências regularmente
npm audit
npx socket-security/cli audit
Execute-os no CI/CD como um gate. Qualquer vulnerabilidade crítica ou alta deve bloquear a compilação.
Reduza sua superfície de dependência do cliente HTTP
Aqui está a questão mais profunda que este ataque levanta: por que seu fluxo de trabalho de teste de API depende de uma biblioteca HTTP de terceiros que pode ser comprometida?
O Apidog oferece um cliente HTTP integrado para teste, depuração e documentação de API. Você não precisa de Axios, node-fetch ou got em sua pilha de testes. O cliente HTTP faz parte da plataforma, sem dependências de terceiros para comprometer.
Para testes de API especificamente, mover suas requisições HTTP para o Apidog elimina toda a superfície de ataque:
- Teste de API: Use o construtor de testes visual do Apidog em vez de escrever scripts de teste baseados em Axios
- Depuração de API: Use o inspetor de requisições integrado do Apidog em vez de código de cliente HTTP personalizado
- Servidores de Mock: Use o mock inteligente do Apidog em vez de construir endpoints de mock com Express + Axios
- Integração CI/CD: Use o Apidog CLI para testes de API automatizados sem dependências HTTP do npm
Experimente o Apidog gratuitamente para ver como remover dependências de bibliotecas HTTP do seu fluxo de trabalho de API reduz seu risco na cadeia de suprimentos.
Verifique a proveniência do pacote
O npm agora suporta a proveniência de pacotes através do Sigstore. Verifique se os pacotes dos quais você depende usam isso:
npm audit signatures
As versões maliciosas do Axios não tinham proveniência OIDC. Lançamentos legítimos de pipelines de CI/CD incluem atestado criptográfico de sua origem de build. Se uma nova versão aparecer sem proveniência, trate-a com desconfiança.
O que isso significa para o ecossistema JavaScript
O modelo de confiança está quebrado
O modelo de confiança do npm depende da segurança da conta do mantenedor. Uma única credencial comprometida dá a um atacante controle sobre um pacote que 83 milhões de projetos instalam semanalmente. A autenticação de dois fatores ajuda, mas tokens de acesso de longa duração ainda podem ser roubados de ambientes de desenvolvimento comprometidos.
A comunidade está discutindo várias mudanças estruturais:
- Publicação OIDC obrigatória: Exigir que todos os pacotes acima de um certo limite de download usem publicação baseada em CI/CD com tokens OIDC em vez de credenciais de longa duração.
- Aprovação de lançamento por duas pessoas: Exigir que um segundo mantenedor aprove os lançamentos para pacotes críticos.
- Escopo de permissão em tempo de execução: Limitar o que os scripts
postinstallpodem acessar, similar ao modelo de permissões do Deno.
Ataques à cadeia de suprimentos não estão diminuindo
Este ataque ocorreu dias após o incidente de fratura do RubyGems e as contínuas preocupações com dependências do PyPI. Registros de pacotes em todos os ecossistemas de linguagem estão sob ataque contínuo. Desenvolvedores de API precisam pensar em sua árvore de dependências como uma superfície de ataque, não como uma conveniência.
A discussão no Reddit capturou bem o sentimento: "NPM é a maior fraqueza da internet hoje e ainda causará uma catástrofe gigante." Concordando ou não com a hipérbole, o ataque ao Axios demonstra que o raio de explosão é real.
Comparação: Abordagens de dependência do cliente HTTP
| Abordagem | Risco da cadeia de suprimentos | Carga de manutenção | Capacidade de teste |
|---|---|---|---|
| Axios + scripts personalizados | Alto (dependência de terceiros) | Alto (gestão de versões) | Configuração manual necessária |
| Fetch nativo do Node.js | Baixo (embutido no runtime) | Baixo | Recursos de teste limitados |
| Cliente integrado do Apidog | Nenhum (sem dependência npm) | Nenhum (gerenciado pela plataforma) | Teste completo, mocking, docs |
| Scripts curl/httpie | Baixo (ferramenta de nível de sistema) | Médio | Automação limitada |
FAQ
O Axios é seguro para usar agora?
Sim. As versões 1.14.0 e 0.30.3 estão limpas. As versões comprometidas (1.14.1 e 0.30.4) foram retiradas em aproximadamente três horas. Verifique sua versão instalada com npm list axios e confira seu lockfile para confirmar que você está em uma versão segura.
Como sei se o RAT rodou na minha máquina?
Verifique artefatos específicos da plataforma: /Library/Caches/com.apple.act.mond no macOS, /tmp/ld.py no Linux, ou %PROGRAMDATA%\wt.exe no Windows. Verifique também se node_modules/plain-crypto-js existe em algum dos seus projetos. O dropper se limpa, então a ausência de artefatos não garante que você esteja seguro se instalou a versão comprometida.
Devo parar de usar o Axios completamente?
Não necessariamente. O Axios continua sendo uma biblioteca bem mantida com um histórico sólido. Mas este ataque deve levá-lo a avaliar se você realmente precisa de um cliente HTTP de terceiros. O Node.js 18+ inclui o fetch nativo. Para testes de API, plataformas como Apidog fornecem clientes HTTP integrados que eliminam essa dependência.
Como posso prevenir ataques à cadeia de suprimentos em meus projetos?
Fixe versões exatas de dependências, commit lockfiles, execute npm ci --ignore-scripts no CI/CD, audite dependências regularmente, verifique a proveniência de pacotes com npm audit signatures e minimize sua árvore de dependências. Considere mover fluxos de trabalho de teste de API para plataformas integradas que não dependam de pacotes npm para comunicação HTTP.
Este ataque foi relacionado ao vazamento do código-fonte do Claude Code?
Ambos os eventos aconteceram no mesmo dia (31 de março de 2026), mas não estão relacionados. O ataque ao Axios foi um comprometimento deliberado da cadeia de suprimentos por um ator de ameaças patrocinado pelo Estado. O vazamento do Claude Code resultou de um bug da ferramenta de build Bun que enviou mapas de origem em produção. A coincidência no tempo alimentou a discussão sobre a segurança geral do registro npm.
Quem estava por trás do ataque ao Axios?
O Google Threat Intelligence Group atribuiu o ataque ao UNC1069, um ator de ameaças suspeito da Coreia do Norte. O malware para macOS compartilha uma sobreposição significativa com WAVESHAPER, um backdoor rastreado pela Mandiant. Grupos norte-coreanos têm vasta experiência em ataques à cadeia de suprimentos, tipicamente visando credenciais de desenvolvedores e infraestrutura de criptomoedas.
Quantos desenvolvedores foram afetados?
As versões maliciosas ficaram ativas por aproximadamente duas a três horas. Com 83 milhões de downloads semanais, a exposição potencial é significativa. O npm não publicou números oficiais de impacto. A detecção em tempo de execução da StepSecurity confirmou que o dropper contatou o C2 em 1.1 segundos após o início do npm install, antes que a resolução das dependências fosse concluída.
O Apidog pode ajudar a prevenir ataques à cadeia de suprimentos?
O Apidog elimina um grande vetor de ataque ao fornecer um cliente HTTP integrado para teste, depuração e documentação de API. Você não precisa instalar Axios, node-fetch ou outras bibliotecas HTTP em seu fluxo de trabalho de teste. Isso reduz sua superfície de dependência npm e remove o risco de pacotes de cliente HTTP comprometidos afetarem seu processo de desenvolvimento de API.
Principais conclusões
- O ataque à cadeia de suprimentos do Axios comprometeu mais de 83 milhões de downloads semanais por meio de uma única conta de mantenedor roubada
- O RAT visa todas as plataformas (macOS, Windows, Linux) e rouba credenciais, chaves SSH e tokens de nuvem
- Verifique seus sistemas imediatamente usando as etapas de detecção acima
- Fixe versões exatas de dependências e desative scripts postinstall no CI/CD
- Reduza sua superfície de dependência do cliente HTTP usando ferramentas integradas como o Apidog para teste de API
- A segurança do registro de pacotes é um problema sistêmico que afeta npm, PyPI e RubyGems
O ataque ao Axios é um alerta. Cada dependência em seu node_modules é uma decisão de confiança. Certifique-se de que você está tomando essas decisões deliberadamente, não por padrão.
