Wichtige Erkenntnisse
- Das npm-Konto des Hauptentwicklers von axios wurde gehackt. Zwei bösartige Versionen wurden veröffentlicht:
axios@1.14.1undaxios@0.30.4. npm hat beide Versionen inzwischen entfernt. - Jeder, der eine der Versionen vor der Deaktivierung installiert hat, sollte davon ausgehen, dass sein System kompromittiert ist. Die bösartigen Versionen injizieren eine Abhängigkeit (
plain-crypto-js) die einen plattformübergreifenden Remote-Access-Trojaner bereitstellt, der auf macOS, Windows und Linux abzielt. - axios verzeichnet rund 100 Millionen wöchentliche Downloads. Dies ist einer der folgenreichsten npm Lieferkettenangriffe, die je verzeichnet wurden.
- Die Malware zerstört sich nach der Ausführung selbst, sodass eine Inspektion nach der Infektion von
node_modulessie nicht aufdecken wird. Sie müssen Ihre Logfiles überprüfen.
Dank der hervorragenden Berichterstattung über diesen Vorfall durch:
- 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)
So überprüfen Sie, ob Sie vom axios-Angriff betroffen sind
Option 1) Manuelle Überprüfung
1. Auf bösartige axios-Versionen prüfen
Scannt Ihre installierten Pakete und die Lock-Datei nach 1.14.1 oder 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. Auf das versteckte Dropper-Paket prüfen
Auch wenn setup.js sich selbst gelöscht hat, existiert das Verzeichnis noch. Allein seine Anwesenheit bestätigt, dass der Dropper ausgeführt wurde.
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENZIELL BETROFFEN"3. Auf RAT-Artefakte auf der Festplatte prüfen
macOS
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "KOMPROMITTIERT"Windows
dir "%PROGRAMDATA%\wt.exe" 2>nul && echo KOMPROMITTIERTLinux
ls -la /tmp/ld.py 2>/dev/null && echo "KOMPROMITTIERT"Option 2) Aikido nutzen (kostenlos)
Verbinden Sie Ihre Repositories mit Aikido (https://app.aikido.dev). Aikidos Malware Monitor vergleicht Ihre Abhängigkeiten mit dem Live-Malware-Feed von Aikido Intel. Wenn axios@1.14.1, axios@0.30.4, oder plain-crypto-js@4.2.1 in einem Ihrer Projekte vorhanden ist, kennzeichnet Aikido diese sofort. Dies funktioniert im kostenlosen Tarif.
Abhilfemaßnahmen
- Auf sichere Versionen pinnen:
npm install axios@1.14.0 # Benutzer von Version 1.x
npm install axios@0.30.3 # 0.x-Benutzer- Überschreibungen hinzufügen, um transitive Auflösung zu verhindern:
{
"dependencies": { "axios": "1.14.0" },
"overrides": { "axios": "1.14.0" },
"resolutions": { "axios": "1.14.0" }
}- Entfernen Sie
plain-crypto-jsaus node_modules:
rm -rf node_modules/plain-crypto-js
npm install --ignore-scripts- Wenn ein RAT-Artefakt gefunden wird (
com.apple.act.mond,wt.exe,ld.py), versuchen Sie nicht, es vor Ort zu bereinigen. Stellen Sie aus einem bekanntermaßen guten Zustand wieder her. - Rotieren Sie alle auf dem betroffenen System zugänglichen Anmeldeinformationen: npm-Tokens, AWS-Zugriffsschlüssel, SSH-Privatschlüssel, CI/CD Secrets,
.envWerte. - Überprüfen Sie die CI/CD-Pipeline-Logs auf alle Ausführungen, die die betroffenen Versionen installiert haben. Rotieren Sie alle injizierten Secrets.
- Führen Sie
npm ci --ignore-scriptsals feste Richtlinie in CI/CD.
Was beim axios Supply-Chain-Angriff geschah
Der Angreifer kompromittierte das jasonsaayman npm-Konto, den Hauptbetreuer von axios. Die Konto-E-Mail wurde geändert in ifstap@proton.me. Der Angreifer veröffentlichte dann axios@1.14.1 am 31. März um 00:21 UTC und axios@0.30.4 um 01:00 UTC. Sowohl die 1.x- als auch die älteren 0.x-Branches waren innerhalb von 39 Minuten betroffen.
Keine der Versionen hatte einen entsprechenden Commit, Tag oder Release im axios GitHub-Repository. Legitime axios-Releases werden über GitHub Actions mit OIDC Trusted Publisher-Bindung veröffentlicht. Diese wurden manuell mit einem gestohlenen npm-Zugriffstoken veröffentlicht.
Die einzige Änderung in beiden Versionen war das Hinzufügen von plain-crypto-js@^4.2.1 als Abhängigkeit. Dieses Paket wird nirgendwo im axios-Quellcode importiert. Es existiert ausschließlich, um einen Postinstall-Hook auszuführen, der einen RAT bereitstellt.
Die Abhängigkeit wurde etwa 18 Stunden zuvor von einem separaten Angreiferkonto vorab bereitgestellt (nrwise, nrwise@proton.me). Eine saubere Köderversion (4.2.0) wurde zuerst veröffentlicht, um die Registry-Historie aufzubauen, gefolgt von der bösartigen 4.2.1 am 30. März um 23:59 UTC.
Der RAT-Dropper (setup.js) kontaktiert sfrclak[.]com:8000 und liefert plattformspezifische Payloads: eine macOS-Binärdatei, die als Apple-Cache-Daemon getarnt ist, unter /Library/Caches/com.apple.act.mond, ein PowerShell-Skript unter Windows, das über ein verstecktes VBScript ausgeführt wird, wobei der Interpreter nach %PROGRAMDATA%\wt.exekopiert wird, und ein Python-Skript unter Linux unter /tmp/ld.py. Nach der Ausführung löscht sich der Dropper selbst und ersetzt seine eigene package.json durch einen sauberen Stub, um Spuren zu verwischen.
{{cta}}
Indicators of Compromise (IOCs)
Bösartige axios-Versionen und Abhängigkeiten:
axios@1.14.1(shasum:2553649f2322049666871cea80a5d0d6adc700ca)axios@0.30.4(shasum:d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71)plain-crypto-js@4.2.1(shasum:07d889e2dadce6f3910dcbc253317d28ca61c766)
Netzwerk:
- C2:
sfrclak[.]com/142.11.206[.]73/http://sfrclak[.]com:8000/6202033
Dateisystem:
- 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:
Angreiferkonten:
- jasonsaayman: kompromittierter axios-Maintainer, E-Mail geändert zu ifstap@proton.me
- nrwise: vom Angreifer erstellt, nrwise@proton.me
Schutz vor der Installation von Malware
Aikido Safe Chain (https://github.com/AikidoSec/safe-chain) ist ein Open-Source-Tool, das npm, yarn und pnpm umschließt. Es prüft jedes Paket anhand des Malware-Feeds von Aikido Intel, bevor es Ihre Maschine erreicht, und erzwingt ein konfigurierbares Mindestalter für Pakete (standardmäßig 48 Stunden), wodurch neu veröffentlichte Versionen unterdrückt werden, bis sie validiert wurden. Bei diesem axios-Angriff, plain-crypto-js@4.2.1 existierte weniger als 24 Stunden, bevor die kompromittierten axios-Versionen es einbezogen. Die Altersprüfung von Safe Chain hätte es allein blockiert.
Kostenlos, keine Tokens erforderlich:
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | shDie Geschichte entwickelt sich... Bleiben Sie dran für Updates.
{{cta}}

