Kurz gesagt
Am 31. März 2026 wurde das npm-Konto des Hauptmaintainers von Axios, dem meistgenutzten JavaScript HTTP-Client (83 Mio. wöchentliche Downloads), kompromittiert. Angreifer veröffentlichten bösartige Versionen (1.14.1 und 0.30.4) mit einem plattformübergreifenden Remote Access Trojaner (RAT), der Zugangsdaten, SSH-Schlüssel und Cloud-Tokens von Entwicklerrechnern stiehlt. Sofortiges Downgrade auf Axios 1.14.0, Änderung aller Geheimnisse und Prüfung auf Kompromittierungsindikatoren sind Pflicht.
Einleitung
Axios verarbeitet mehr HTTP-Anfragen als jede andere JavaScript-Bibliothek. Wenn du in den letzten Jahren einen API-Client gebaut, Endpunkte getestet oder ein Frontend ans Backend angebunden hast, hast du wahrscheinlich Axios verwendet.
Am 31. März 2026 um 00:21 Uhr UTC veröffentlichte ein Angreifer Axios 1.14.1 über ein kompromittiertes Maintainer-Konto. Das Paket war nahezu identisch mit der legitimen Version – mit einer entscheidenden Änderung in der package.json: Eine neue Abhängigkeit plain-crypto-js wurde injiziert, die einen Remote Access Trojaner beim Ausführen von npm install installierte.
Die betroffenen Versionen blieben etwa 2–3 Stunden online, bevor npm sie entfernte – bei 83 Millionen wöchentlichen Downloads.
💡 Wenn du APIs entwickelst oder testest, zielte dieser Angriff direkt auf deine Toolchain. Der integrierte HTTP-Client von Apidog macht externe HTTP-Bibliotheken im API-Test-Prozess überflüssig – und eliminiert diese Angriffsfläche.
In diesem Beitrag findest du: Wie der Angriff ablief, wie du prüfst, ob dein System betroffen ist, und welche konkreten Maßnahmen API-Teams im Abhängigkeitsmanagement umsetzen sollten.
Wie sich der Axios-Supply-Chain-Angriff entfaltete
Der Zeitplan
Der Angriff erfolgte in einem präzisen 18-Stunden-Fenster:
-
30. März, 05:57 UTC: Unverdächtiges Köderpaket
plain-crypto-js@4.2.0auf npm veröffentlicht. -
30. März, 23:59 UTC: Bösartige Version
plain-crypto-js@4.2.1mitpostinstall-Hook und Dropper bereitgestellt. -
31. März, 00:21 UTC:
axios@1.14.1über kompromittiertes Konto veröffentlicht. -
31. März, 01:00 UTC:
axios@0.30.4folgt kurz darauf für Projekte, die noch 0.x nutzen. - 31. März, ~03:15 UTC: npm entfernt beide Axios-Versionen nach Community-Hinweisen.
-
31. März, 04:26 UTC: npm veröffentlicht einen Security-Stub für
plain-crypto-js, um erneute Veröffentlichung zu verhindern.
Wie das Konto kompromittiert wurde
Der Angreifer übernahm das jasonsaayman-npm-Konto, wechselte die E-Mail zu ifstap@proton.me. Hinweise für forensische Prüfung:
- Legitime Releases nutzen GitHub Actions mit OIDC Trusted Publisher. Die bösartigen Versionen hatten keine OIDC-Bindung.
- Kein
gitHead-Feld in den kompromittierten Releases – keine zugehörigen GitHub-Commits. - Veröffentlichung erfolgte manuell mit gestohlenen, langlebigen npm-Tokens statt über CI/CD.
Tipp: Wenn deine Organisation npm-Pakete veröffentlicht, prüfe Releases automatisiert auf OIDC-Bindung und CI/CD-Quelle.
Die Abhängigkeitsinjektion
Nur eine Zeile in der package.json von Axios wurde geändert: Hinzufügen von plain-crypto-js@^4.2.1 als Runtime-Abhängigkeit. Das Paket wird nicht im Code importiert, sondern löst allein durch den postinstall-Hook die Schadfunktion beim npm install aus.
Binärvergleich: Nur package.json unterscheidet sich zwischen 1.14.0 (clean) und 1.14.1 (kompromittiert).
Was die bösartige Nutzlast tut
Der Dropper-Mechanismus
Der postinstall-Hook in plain-crypto-js führt eine 4,2 KB große, doppelt obfuskierte Datei setup.js aus:
- XOR-Verschlüsselung mit Schlüssel aus
"OrDeR_7077" - Base64-Kodierung mit Zeichenumkehr
Nach Dekodierung erkennt der Dropper das Betriebssystem und lädt plattformspezifische Nutzlasten.
Plattformwege
macOS:
Writes AppleScript to /tmp/6202033
Executes via osascript
Downloads payload to /Library/Caches/com.apple.act.mond
Windows:
Copies PowerShell to %PROGRAMDATA%\wt.exe (Persistenz)
Executes VBScript dropper via cscript
Linux:
Downloads Python RAT to /tmp/ld.py
Executes via nohup python3
Alle Varianten kommunizieren mit einem Command-and-Control-Server (C2):
- macOS:
packages.npm.org/product0 - Windows:
packages.npm.org/product1 - Linux:
packages.npm.org/product2
RAT-Fähigkeiten
- Shell-Befehle ausführen
- Dateisystem scannen und exfiltrieren
- Prozesse auflisten und injizieren
- In-Memory-Injektion (fileless)
- 60s Beacon-Intervalle zur C2
Risiko: Vollständige Fernsteuerung über den Entwicklerrechner, Zugriff auf .env, SSH-Keys, Cloud-Tokens etc.
Anti-Forensik
Nach Ausführung:
- Löscht
setup.js - Entfernt bösartige
package.json - Benennt
package.md(saubere 4.2.0) inpackage.jsonum
So täuscht ein späteres npm list die saubere Version vor.
Wer steckt hinter dem Angriff?
Laut Google Threat Intelligence Group ist UNC1069 (vermutlich nordkoreanisch) verantwortlich. Die macOS-Malware ähnelt stark WAVESHAPER, einer bekannten Backdoor. Ziel: Entwickler-Workstations, Credential- und Token-Diebstahl in großem Maßstab.
So prüfst du, ob du betroffen bist
Schritt 1: Axios-Version prüfen
In jedem Projekt mit Axios:
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
Gibt es Treffer, ist eine kompromittierte Version installiert.
Schritt 2: Bösartige Abhängigkeit prüfen
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENZIELL BETROFFEN"
Existiert das Verzeichnis, wurde die Nutzlast ausgeführt.
Schritt 3: System nach RAT-Artefakten durchsuchen
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"
Schritt 4: Netzwerk-Indikatoren prüfen
Blockiere und scanne auf folgende Ziele:
-
C2-Domain:
sfrclak.com -
C2-IP:
142.11.206.73 -
C2-URL:
http://sfrclak.com:8000/6202033
Schritt 5: CI/CD-Build-Logs prüfen
Alle CI/CD-Ausführungen zwischen 31. März 00:21–03:15 UTC prüfen. Jedes npm install/ci, das Axios installierte, könnte infiziert sein.
Sofortige Maßnahmen
1. Axios sofort downgraden
npm install axios@1.14.0
Für 0.x-Branch:
npm install axios@0.30.3
2. Versions-Overrides in package.json setzen
Verhindert transitive Auflösung bösartiger Versionen:
npm:
{
"overrides": {
"axios": "1.14.0"
}
}
Yarn:
{
"resolutions": {
"axios": "1.14.0"
}
}
3. Bösartiges Paket entfernen
rm -rf node_modules/plain-crypto-js
4. Alle Zugangsdaten ändern
Gehe davon aus, dass folgende Daten kompromittiert sind:
- npm-Tokens
- AWS/GCP/Azure-Credentials
- SSH-Keys
- GitHub-Tokens
- API-Keys aus
.env - DB-Logins
- Secrets in Env-Variablen
Alles ändern! Man weiß nicht, was exfiltriert wurde.
5. C2 auf Netzwerkebene blockieren
echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts
6. Bei Funden System neu aufsetzen
Wurden Artefakte gefunden: Rechner aus einem vertrauenswürdigen Backup neu aufsetzen – RAT kann alles verändert haben.
Langfristige Schutzmaßnahmen für API-Teams
Lockfiles und exakte Versionen nutzen
Der Angriff nutzte den ^-Semver-Bereich aus. Setze exakte Versionen und committe Lockfiles. Nutze in CI/CD immer npm ci:
{
"dependencies": {
"axios": "1.14.0"
}
}
Postinstall-Skripte in CI/CD deaktivieren
Verhindere das Ausführen von postinstall-Hooks:
npm ci --ignore-scripts
Für Pakete, die native Kompilierung brauchen, selektiv via .npmrc erlauben:
ignore-scripts=true
Abhängigkeiten regelmäßig prüfen
npm audit
npx socket-security/cli audit
Automatisiere das als CI/CD-Gate.
Reduziere HTTP-Client-Abhängigkeiten
Frage dich: Brauchst du wirklich eine externe HTTP-Bibliothek im Test-Workflow?
Apidog bietet z.B. einen integrierten HTTP-Client für API-Tests, Debugging und Dokumentation – keine npm-Abhängigkeit, kein Supply-Chain-Risiko.
Konkret:
- API-Tests: Nutze den visuellen Test-Builder statt Axios-Skripte
- API-Debugging: Nutze den integrierten Request-Inspector
- Mock-Server: Nutze Smart Mock statt eigener Mocks via Express + Axios
- CI/CD: Nutze Apidog CLI für automatisierte API-Tests ohne npm-HTTP-Bibliotheken
Teste Apidog kostenlos, um deinen API-Workflow ohne HTTP-Client-Abhängigkeit abzusichern.
Paket-Provenienz überprüfen
npm unterstützt Paket-Provenienz via Sigstore:
npm audit signatures
Fehlende Provenienz (z.B. OIDC-Bindung) ist ein Alarmzeichen.
Was bedeutet das für das JavaScript-Ökosystem?
Vertrauensmodell ist defekt
Eine kompromittierte Maintainer-Anmeldung genügt, um 83 Millionen Projekte pro Woche zu treffen. 2FA hilft, aber gestohlene Tokens bleiben ein Risiko.
Diskutierte Maßnahmen:
- Pflicht-OIDC-Releases ab bestimmtem Download-Level
- Zwei-Personen-Freigabe für kritische Pakete
- Runtime-Berechtigungen für Skripte (analog Deno)
Supply-Chain-Angriffe nehmen zu
Nur Tage nach RubyGems- und PyPI-Vorfällen: Paketregister aller Ökosysteme stehen unter Dauerbeschuss. Jeder Abhängigkeitsbaum ist eine Angriffsfläche.
Zitat aus der Reddit-Diskussion:
„NPM ist heute die größte Schwachstelle des Internets und wird immer noch eine riesige Katastrophe verursachen.“
Der Axios-Angriff zeigt, dass der Explosionsradius real ist.
Vergleich: HTTP-Client-Abhängigkeitsansätze
| Ansatz | Supply-Chain-Risiko | Wartungsaufwand | Testfähigkeit |
|---|---|---|---|
| Axios + benutzerdefinierte Skripte | Hoch (Drittanbieter-Abhängigkeit) | Hoch (Versionsverwaltung) | Manuelle Einrichtung erforderlich |
| Node.js native Fetch | Niedrig (im Laufzeitumgebung integriert) | Niedrig | Eingeschränkte Testfunktionen |
| Apidog integrierter Client | Keine (keine npm-Abhängigkeit) | Keine (Plattform-verwaltet) | Volle Test-, Mock- und Dokumentationsfunktionen |
| curl/httpie Skripte | Niedrig (System-Tool) | Mittel | Eingeschränkte Automatisierung |
FAQ
Ist Axios jetzt sicher zu verwenden?
Ja. Die Versionen 1.14.0 und 0.30.3 sind sauber. Die kompromittierten Versionen (1.14.1, 0.30.4) wurden nach ca. drei Stunden entfernt. Prüfe mit npm list axios und kontrolliere dein Lockfile.
Wie erkenne ich, ob der RAT auf meinem Rechner lief?
Suche nach plattformspezifischen Artefakten:
-
/Library/Caches/com.apple.act.mond(macOS) -
/tmp/ld.py(Linux) -
%PROGRAMDATA%\wt.exe(Windows) - Prüfe, ob
node_modules/plain-crypto-jsexistiert.
Fehlende Artefakte sind kein Garant für Sicherheit, wenn eine kompromittierte Version installiert war.
Sollte ich Axios komplett meiden?
Nicht zwingend. Axios bleibt eine gepflegte Bibliothek mit guter Historie. Der Vorfall sollte aber dazu führen, kritisch zu prüfen, ob du überhaupt einen Drittanbieter-HTTP-Client brauchst (Node.js 18+ hat natives fetch). Für API-Tests bieten Plattformen wie Apidog integrierte Clients ohne npm-Abhängigkeit.
Wie verhindere ich Supply-Chain-Angriffe in meinen Projekten?
- Exakte Abhängigkeitsversionen und Lockfiles committen
-
npm ci --ignore-scriptsin CI/CD nutzen - Abhängigkeiten regelmäßig prüfen (
npm audit signatures) - Abhängigkeitsbaum minimieren
- API-Test-Workflows auf integrierte Tools ohne npm-HTTP-Client verlagern
Hängt der Angriff mit dem Claude-Code-Leak zusammen?
Beide Ereignisse fanden am 31. März 2026 statt, sind aber unabhängig. Der Axios-Angriff war gezielte Supply-Chain-Kompromittierung, der Claude-Leak entstand durch einen Fehler im Bun-Build-Tool.
Wer steckte hinter dem Axios-Angriff?
Google ordnet den Angriff UNC1069 zu (vermutlich Nordkorea). Die Malware ähnelt WAVESHAPER-Backdoors. Ziel: Entwickler-Zugangsdaten und Krypto-Infrastruktur.
Wie viele Entwickler waren betroffen?
Die bösartigen Versionen waren ca. 2–3 Stunden aktiv. Bei 83 Mio. wöchentlichen Downloads ist das potentielle Risiko groß. npm hat keine offiziellen Zahlen veröffentlicht.
Kann Apidog helfen, Supply-Chain-Angriffe zu verhindern?
Apidog reduziert das Risiko, indem es einen integrierten HTTP-Client für API-Tests, Debugging und Doku bereitstellt – keine Installation von Axios oder anderen HTTP-Bibliotheken notwendig. Das minimiert die npm-Angriffsfläche im API-Workflow.
Wichtige Erkenntnisse
- Der Axios-Supply-Chain-Angriff kompromittierte 83+ Mio. wöchentliche Downloads durch ein gestohlenes Maintainer-Konto
- Der RAT zielte auf alle Plattformen und stahl Zugangsdaten, SSH-Keys, Cloud-Tokens
- Prüfe deine Systeme mit den obigen Schritten
- Setze exakte Abhängigkeitsversionen, deaktiviere Postinstall-Skripte in CI/CD
- Reduziere HTTP-Client-Abhängigkeiten durch integrierte Tools wie Apidog
- Die Sicherheit von Paketregistern ist ein systemisches, sprachenübergreifendes Problem
Der Axios-Angriff ist ein Weckruf: Jede Abhängigkeit in deinen node_modules ist eine Vertrauensentscheidung. Triff diese bewusst – nicht aus Bequemlichkeit.
Top comments (0)