Aikido

axios comprometido no npm: conta do mantenedor sequestrada, RAT implantado

Escrito por
Madeline Lawrence

Principais pontos

  • A conta npm do mantenedor principal do axios foi sequestrada. Duas versões maliciosas foram publicadas: axios@1.14.1 e axios@0.30.4. O npm removeu ambas desde então.
  • Qualquer pessoa que tenha instalado qualquer uma das versões antes da remoção deve assumir que seu sistema está comprometido. As versões maliciosas injetam uma dependência (plain-crypto-js) que implanta um trojan de acesso remoto multiplataforma visando macOS, Windows e Linux.
  • axios tem aproximadamente 100 milhões de downloads semanais. Este é um dos ataques à Supply chain npm mais impactantes já registrados.
  • O malware se autodestrói após a execução, então a inspeção pós-infecção de node_modules não o revelará. Você precisa verificar seus arquivos de log.

Crédito à excelente cobertura deste incidente por:

Como verificar se você foi afetado pelo ataque ao axios

Opção 1) Verificar manualmente

1. Verificar versões maliciosas do axios

Verifica seus pacotes instalados e arquivo de lock por 1.14.1 ou 0.30.4.

npm list axios 2>/dev/null | grep -E "1.14.1|0.30.4"
grep -A1 '"axios"' package-lock.json | grep -E "1.14.1|0.30.4"

2. Verificar o pacote dropper oculto

Mesmo que setup.js tenha se autoexcluído, o diretório ainda existe. Sua presença por si só confirma que o dropper foi executado.

ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"

3. Verificar artefatos de RAT no disco

macOS

ls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "COMPROMISED"

Windows

dir "%PROGRAMDATA%\wt.exe" 2>nul && echo COMPROMISED

Linux

ls -la /tmp/ld.py 2>/dev/null && echo "COMPROMETIDO"

Opção 2) Usar Aikido (gratuito)

Conecte seus repositórios ao Aikido (https://app.aikido.dev). O Malware Monitor Aikido compara as suas dependências com o feed de malware em tempo real Aikido . Se axios@1.14.1, axios@0.30.4, ou plain-crypto-js@4.2.1 estiver presente em qualquer um dos seus projetos, o Aikido o sinaliza imediatamente. Isso funciona no plano gratuito.

Verifique se seu código foi afetado pelo ataque à cadeia de suprimentos do Axios - faça uma varredura gratuita com Aikido

Etapas de remediação

  1. Fixar em versões seguras:
npm install axios@1.14.0   # Utilizadores da versão 1.x
npm install axios@0.30.3   # Utilizadores da versão 0.x
  1. Adicione overrides para evitar a resolução transitiva:
{
  "dependencies": { "axios": "1.14.0" },
  "overrides":    { "axios": "1.14.0" },
  "resolutions":  { "axios": "1.14.0" }
}
  1. Remova plain-crypto-js do diretório node_modules:
rm -rf node_modules/plain-crypto-js
npm install --ignore-scripts
  1. Se for detetado algum artefacto RAT (com.apple.act.mond, wt.exe, ld.py), não tente realizar a limpeza no local. Recrie a partir de um estado comprovadamente correto.
  2. Atualize todas as credenciais acessíveis no sistema afetado: tokens do npm, chaves de acesso da AWS, chaves privadas SSH, secrets de CI/CD, .env valores.
  3. Audite os logs do pipeline de CI/CD para quaisquer execuções que instalaram as versões afetadas. Gire todos os Secrets injetados.
  4. Execute npm ci --ignore-scripts como política permanente em CI/CD.

O que aconteceu no ataque à Supply chain do axios

O atacante comprometeu o jasonsaayman conta do npm, o principal mantenedor do axios. O e-mail da conta foi alterado para ifstap@proton.me. O atacante então publicou axios@1.14.1 às 00:21 UTC de 31 de março e axios@0.30.4 às 01:00 UTC. Tanto as branches 1.x quanto as legadas 0.x foram afetadas em 39 minutos.

Nenhuma das versões tinha um commit, tag ou release correspondente no repositório axios do GitHub. Releases legítimas do axios são publicadas via GitHub Actions com binding OIDC Trusted Publisher. Estas foram publicadas manualmente com um token de acesso npm roubado.

A única alteração em ambas as versões foi a adição de plain-crypto-js@^4.2.1 como uma dependência. Este pacote nunca é importado em nenhum lugar no código-fonte do axios. Ele existe unicamente para executar um hook de postinstall que implanta um RAT.

A dependência foi preparada cerca de 18 horas antes por uma conta de atacante distinta (por outro lado, nrwise@proton.me). Uma versão simples do isco (4.2.0) foi publicado primeiro para criar um histórico no registo, seguido pelo malicioso 4.2.1 às 23h59 UTC do dia 30 de março.

O dropper de RAT (setup.js) contata sfrclak[.]com:8000 e entrega payloads específicos da plataforma: um binário macOS disfarçado como um daemon de cache da Apple em /Library/Caches/com.apple.act.mond, um script PowerShell no Windows executado via VBScript oculto com o interpretador copiado para %PROGRAMDATA%\wt.exe, e um script Python no Linux em /tmp/ld.py. Após a execução, o dropper se autoexclui e substitui seu próprio package.json com um stub limpo para ocultar evidências.

{{cta}}

Indicadores de comprometimento (IOCs)

Versões e dependências maliciosas do axios:

  • axios@1.14.1 (shasum: 2553649f2322049666871cea80a5d0d6adc700ca)
  • axios@0.30.4 (shasum: d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71)
  • plain-crypto-js@4.2.1 (shasum: 07d889e2dadce6f3910dcbc253317d28ca61c766)

Rede:

  • C2: sfrclak[.]com / 142.11.206[.]73 / http://sfrclak[.]com:8000/6202033

Sistema de arquivos:

  • macOS: /Library/Caches/com.apple.act.mond
    • sha256: 92ff08773995ebc8d55ec4b8e1a225d0d1e51efa4ef88b8849d0071230c9645a
  • Windows: %PROGRAMDATA%\wt.exe, %TEMP%\6202033.vbs, %TEMP%\6202033.ps1
    • sha256: 617b67a8e1210e4fc87c92d1d1da45a2f311c08d26e89b12307cf583c900d101 (powershell)
  • Linux: /tmp/ld.py
    • sha256: fcb81618bb15edfdedfb638b4c08a2af9cac9ecfa551af135a8402bf980375cf

Contas de atacantes:

Como se proteger contra a instalação de malware

Aikido Safe Chain (https://github.com/AikidoSec/safe-chain) é uma ferramenta de código aberto que envolve npm, yarn e pnpm. Ela verifica cada pacote contra o feed de malware da Aikido Intel antes que ele chegue à sua máquina e impõe uma idade mínima configurável para o pacote (48 horas por padrão), suprimindo versões recém-publicadas até que sejam validadas. Neste ataque ao axios, plain-crypto-js@4.2.1 existiu por menos de 24 horas antes que as versões comprometidas do axios o incorporassem. A verificação de idade do Safe Chain por si só o teria bloqueado.

Gratuito, sem tokens necessários:

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | sh

Notícia em desenvolvimento... Fique atento para atualizações.

{{cta}}

Compartilhar:

https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat

Inscreva-se para receber notícias

4.7/5
Cansado de falsos positivos?

Experimente Aikido como 100 mil outros.
Começar Agora
Obtenha um tour personalizado

Confiado por mais de 100 mil equipes

Agende Agora
Escaneie seu aplicativo em busca de IDORs e caminhos de ataque reais

Confiado por mais de 100 mil equipes

Iniciar Escaneamento
Veja como o pentest de IA testa seu aplicativo

Confiado por mais de 100 mil equipes

Iniciar Testes
Verifique se você foi afetado no ataque à cadeia de suprimentos do axios

Gratuito, não é necessário cartão de crédito

Verificar por malware

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.