Principais pontos
- A conta npm do mantenedor principal do axios foi sequestrada. Duas versões maliciosas foram publicadas:
axios@1.14.1eaxios@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_modulesnão o revelará. Você precisa verificar seus arquivos de log.
Crédito à excelente cobertura deste incidente por:
- StepSecurity (https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan)
- Socket (https://socket.dev/blog/axios-npm-package-compromised)
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 COMPROMISEDLinux
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.
Etapas de remediação
- 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- Adicione overrides para evitar a resolução transitiva:
{
"dependencies": { "axios": "1.14.0" },
"overrides": { "axios": "1.14.0" },
"resolutions": { "axios": "1.14.0" }
}- Remova
plain-crypto-jsdo diretório node_modules:
rm -rf node_modules/plain-crypto-js
npm install --ignore-scripts- 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. - Atualize todas as credenciais acessíveis no sistema afetado: tokens do npm, chaves de acesso da AWS, chaves privadas SSH, secrets de CI/CD,
.envvalores. - Audite os logs do pipeline de CI/CD para quaisquer execuções que instalaram as versões afetadas. Gire todos os Secrets injetados.
- Execute
npm ci --ignore-scriptscomo 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
- sha256:
- Windows:
%PROGRAMDATA%\wt.exe, %TEMP%\6202033.vbs, %TEMP%\6202033.ps1- sha256:
617b67a8e1210e4fc87c92d1d1da45a2f311c08d26e89b12307cf583c900d101(powershell)
- sha256:
- Linux:
/tmp/ld.py- sha256:
fcb81618bb15edfdedfb638b4c08a2af9cac9ecfa551af135a8402bf980375cf
- sha256:
Contas de atacantes:
- jasonsaayman: mantenedor do axios comprometido, e-mail alterado para ifstap@proton.me
- nrwise: criada pelo atacante, nrwise@proton.me
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 | shNotícia em desenvolvimento... Fique atento para atualizações.
{{cta}}

