DEV Community

Cover image for Como o Ataque à Cadeia de Suprimentos do NPM Axios Acontece (E Como Proteger Seus Projetos de API)
Lucas
Lucas

Posted on • Originally published at apidog.com

Como o Ataque à Cadeia de Suprimentos do NPM Axios Acontece (E Como Proteger Seus Projetos de API)

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.

Experimente o Apidog hoje

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, com apenas o package.json alterado entre 86 arquivos — suficiente para injetar 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 ficaram ativas por aproximadamente duas a três horas antes de serem retiradas do npm. Duas a três horas em meio a 83 milhões de downloads semanais.

💡Se você está construindo ou testando APIs, este ataque mirou diretamente sua cadeia de ferramentas. O cliente HTTP embutido do Apidog elimina a necessidade de bibliotecas HTTP de terceiros em seu fluxo de trabalho de teste de API, removendo toda essa superfície de ataque. Baixe o Apidog gratuitamente para acompanhar as etapas de auditoria de segurança abaixo.

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 à 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 a operação em 18 horas:

  • 30 de março, 05:57 UTC: Publicado pacote "limpo" plain-crypto-js@4.2.0 no npm, criando histórico para parecer legítimo.
  • 30 de março, 23:59 UTC: Publicada versão maliciosa plain-crypto-js@4.2.1 com hook postinstall contendo o dropper.
  • 31 de março, 00:21 UTC: Lançado axios@1.14.1 pela conta comprometida jasonsaayman.
  • 31 de março, 01:00 UTC: Lançado axios@0.30.4, mirando projetos que usam o branch 0.x.
  • 31 de março, ~03:15 UTC: npm removeu ambas as versões do Axios após relatos.
  • 31 de março, 04:26 UTC: npm publicou stub de segurança para plain-crypto-js para impedir republicação.

Como a conta foi comprometida

O atacante assumiu o controle da conta npm jasonsaayman, alterando o e-mail para ifstap@proton.me. Evidências forenses incluem:

  • Lançamentos legítimos do Axios usam GitHub Actions com OIDC Trusted Publisher do npm. As versões maliciosas não possuíam ligação OIDC.
  • Ausência do campo gitHead nos releases comprometidos — não havia commits correspondentes no GitHub.
  • Uso de tokens npm de longa duração roubados para publicar manualmente, fora do CI/CD.

Automatize verificações para releases sem OIDC e sem proveniência de CI/CD.

A técnica de injeção de dependência

O atacante modificou apenas o package.json, adicionando plain-crypto-js@^4.2.1 como dependência. O pacote não foi importado no código, existindo apenas para acionar seu hook postinstall durante o npm install.

Análise binária confirmou: somente o package.json diferia entre 1.14.0 (limpo) e 1.14.1 (comprometido).

O que o payload malicioso faz

O mecanismo do dropper

O hook postinstall de plain-crypto-js executou setup.js (4.2 KB, ofuscado):

  1. Camada 1: Cifra XOR com chave baseada em "OrDeR_7077"
  2. Camada 2: Base64 + reversão de caracteres

Após decodificação, o dropper identificou o SO e executou payloads específicos.

Caminhos de ataque por plataforma

macOS:

# Escreve AppleScript em /tmp/6202033
# Executa via osascript
# Baixa payload para /Library/Caches/com.apple.act.mond
Enter fullscreen mode Exit fullscreen mode

Windows:

# Copia PowerShell para %PROGRAMDATA%\wt.exe (persistência)
# Executa dropper VBScript via cscript
Enter fullscreen mode Exit fullscreen mode

Linux:

# Baixa RAT Python para /tmp/ld.py
# Executa via nohup python3
Enter fullscreen mode Exit fullscreen mode

Todos contatam servidor de comando e controle (C2) via POST:

  • macOS: packages.npm.org/product0
  • Windows: packages.npm.org/product1
  • Linux: packages.npm.org/product2

Capacidades do RAT

O RAT 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)
  • Beacon de 60s para infraestrutura C2

Ou seja, o atacante obtém controle remoto total de sua máquina.

Anti-forense: o payload autolimpante

Após execução, o dropper:

  1. Exclui setup.js
  2. Exclui o package.json malicioso
  3. Renomeia um package.md pré-configurado para package.json, reportando versão 4.2.0

Assim, npm list mostra a versão "limpa", dificultando identificação manual.

Quem está por trás deste ataque

O Google Threat Intelligence Group atribuiu o ataque ao grupo UNC1069 (suspeito da Coreia do Norte). O malware para macOS tem sobreposição com WAVESHAPER, backdoor C++ rastreado pela Mandiant.

Ataques à cadeia de suprimentos são tática conhecida desses grupos, mirando ferramentas de desenvolvimento para capturar credenciais e infraestrutura crítica.

Como verificar se você foi afetado

Passo 1: Verifique sua versão do Axios

Execute em cada projeto:

npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
Enter fullscreen mode Exit fullscreen mode

Se retornar resultado, seu projeto instalou a versão comprometida.

Passo 2: Verifique a dependência maliciosa

ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENCIALMENTE AFETADO"
Enter fullscreen mode Exit fullscreen mode

Se existir o diretório, o payload provavelmente executou.

Passo 3: Verifique artefatos do RAT

macOS:

ls -la /Library/Caches/com.apple.act.mond 2>/dev/null
Enter fullscreen mode Exit fullscreen mode

Linux:

ls -la /tmp/ld.py 2>/dev/null
Enter fullscreen mode Exit fullscreen mode

Windows (PowerShell):

Test-Path "$env:PROGRAMDATA\wt.exe"
Enter fullscreen mode Exit fullscreen mode

Passo 4: Verifique indicadores de rede

Bloqueie e escaneie 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 pipelines entre 31/03 00:21 e 03:15 UTC. Qualquer execução de npm install/npm ci nesse período pode ter executado o dropper.

Etapas de remediação imediata

Se encontrar indicadores de comprometimento, trate o sistema como totalmente comprometido.

1. Faça downgrade do Axios

npm install axios@1.14.0
Enter fullscreen mode Exit fullscreen mode

Ou para branch 0.x:

npm install axios@0.30.3
Enter fullscreen mode Exit fullscreen mode

2. Adicione substituições de versão ao seu package.json

Evite resolução para versões maliciosas:

{
  "overrides": {
    "axios": "1.14.0"
  }
}
Enter fullscreen mode Exit fullscreen mode

Para Yarn:

{
  "resolutions": {
    "axios": "1.14.0"
  }
}
Enter fullscreen mode Exit fullscreen mode

3. Remova o pacote malicioso

rm -rf node_modules/plain-crypto-js
Enter fullscreen mode Exit fullscreen mode

4. Rotacione todas as credenciais

Considere comprometido:

  • Tokens npm
  • Credenciais AWS/GCP/Azure
  • Chaves SSH
  • Tokens GitHub
  • Chaves de API em .env
  • Credenciais de banco de dados
  • Segredos em variáveis de ambiente

Rotacione tudo.

5. Bloqueie C2 na rede

No Linux/macOS:

echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts
Enter fullscreen mode Exit fullscreen mode

6. Se artefatos forem encontrados, reconstrua a máquina

Se encontrou arquivos do passo 3, não confie mais no sistema. Faça rebuild limpo.

Defesas de longo prazo para equipes de desenvolvimento de API

Use lockfiles e fixe versões exatas

Não use faixas semânticas:

{
  "dependencies": {
    "axios": "1.14.0"
  }
}
Enter fullscreen mode Exit fullscreen mode

Sempre commit o package-lock.json/yarn.lock. No CI/CD, use:

npm ci
Enter fullscreen mode Exit fullscreen mode

Desative scripts postinstall no CI/CD

Bloqueie hooks maliciosos:

npm ci --ignore-scripts
Enter fullscreen mode Exit fullscreen mode

Ou, em .npmrc:

ignore-scripts=true
Enter fullscreen mode Exit fullscreen mode

Permita scripts apenas quando necessário.

Audite dependências regularmente

npm audit
npx socket-security/cli audit
Enter fullscreen mode Exit fullscreen mode

Configure no CI/CD para bloquear builds em caso de vulnerabilidades críticas/altas.

Reduza sua superfície de dependência do cliente HTTP

Evite dependências npm para requisições HTTP em testes de API.

  • Use o cliente HTTP integrado do Apidog (link)
  • Elimine Axios/node-fetch/got de testes
  • Para mock, debug e automação CI/CD, use os recursos internos do Apidog

Verifique a proveniência do pacote

Verifique assinaturas Sigstore:

npm audit signatures
Enter fullscreen mode Exit fullscreen mode

Não confie em versões sem proveniência OIDC.

O que isso significa para o ecossistema JavaScript

O modelo de confiança está quebrado

A proteção depende da segurança da conta do mantenedor. Uma credencial vazada compromete milhões. OIDC, aprovação dupla e escopo de permissões para scripts são discussões em andamento.

Ataques à cadeia de suprimentos continuam crescendo

Incidentes similares ocorreram no RubyGems e PyPI. Trate sua árvore de dependências como superfície de ataque.

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. Versões 1.14.0 e 0.30.3 estão limpas. As comprometidas (1.14.1 e 0.30.4) foram removidas em ~3h. Verifique sua versão com npm list axios e confira o lockfile.

Como sei se o RAT rodou na minha máquina?

Verifique artefatos:

  • macOS: /Library/Caches/com.apple.act.mond
  • Linux: /tmp/ld.py
  • Windows: %PROGRAMDATA%\wt.exe
  • Ou node_modules/plain-crypto-js no projeto

O dropper se limpa, então ausência de artefatos não garante segurança se você instalou a versão vulnerável.

Devo parar de usar o Axios completamente?

Não necessariamente. O Axios segue bem mantido. Reavalie se realmente precisa de um cliente HTTP de terceiros: Node.js 18+ traz fetch nativo; para testes, considere plataformas como o Apidog.

Como posso prevenir ataques à cadeia de suprimentos em meus projetos?

  • Fixe versões exatas
  • Commit lockfiles
  • Execute npm ci --ignore-scripts no CI/CD
  • Audite dependências
  • Verifique assinaturas via npm audit signatures
  • Reduza dependências npm
  • Prefira plataformas integradas para testes de API

Este ataque foi relacionado ao vazamento do código-fonte do Claude Code?

Não. Ambos ocorreram em 31/03/2026, mas são incidentes distintos.

Quem estava por trás do ataque ao Axios?

O ataque é atribuído ao grupo UNC1069 (Coreia do Norte). Malware no macOS apresenta sobreposição com WAVESHAPER, rastreado pela Mandiant.

Quantos desenvolvedores foram afetados?

As versões maliciosas ficaram ativas por 2–3 horas, com exposição potencial ampla. Não há números oficiais. StepSecurity confirmou que o dropper contatou o C2 em 1.1s após início do npm install.

O Apidog pode ajudar a prevenir ataques à cadeia de suprimentos?

Sim, ao fornecer um cliente HTTP integrado para testes, debug e documentação de API. Você elimina dependências npm como Axios/node-fetch em seu fluxo de teste, reduzindo a superfície de ataque.

Principais conclusões

  • O ataque ao Axios comprometeu potencialmente mais de 83 milhões de downloads semanais via conta de mantenedor roubada
  • O RAT visa macOS, Windows e Linux, roubando credenciais, chaves SSH e tokens de nuvem
  • Verifique seus sistemas imediatamente seguindo os passos acima
  • Fixe versões exatas e desative scripts postinstall no CI/CD
  • Reduza dependências HTTP usando ferramentas integradas como o Apidog
  • A segurança de registros de pacotes é um desafio sistêmico para npm, PyPI e RubyGems

O ataque ao Axios é um alerta: cada dependência no seu node_modules é uma decisão de confiança. Faça essas escolhas deliberadamente.

Top comments (0)