ChainDrop-Wurm: Selbstverbreitende Malware infiziert 400+ npm-Pakete

Schritt für Schritt
So lief der ChainDrop-Angriff ab
Klicken Sie auf eine Phase für Details – oder lassen Sie die Animation durchlaufen.
PHASE 1/6 · Erstzugriff

Angreifer übernahmen mit gestohlenen Maintainer-Zugangsdaten beliebte npm-Pakete und veröffentlichten manipulierte Versionen.

T1195.002 – Compromise Software Supply Chain T1078 – Valid Accounts
  • Kontrolle über Pakete der keyv-/cacheable-Familie via gestohlener Maintainer-Zugangsdaten (Microsoft Threat Intelligence)
  • Erste manipulierte Version keyv@6.0.0 um 09:35 UTC am 4. August 2026
  • Snyk bestätigte zunächst elf bösartige Releases (u. a. cacheable@2.5.1, ecto@5.0.1)
  • Microsoft dokumentierte über 400 kompromittierte Pakete über mehrere Publisher
PHASE 2/6 · Ausführung

Ein preinstall-Lifecycle-Hook startete bösartigen Code allein durch den Installationsbefehl npm install.

T1059.007 – Command and Scripting Interpreter: JavaScript T1204.003 – User Execution: Malicious Image
  • Manipulierter Eintrag "preinstall": "node setup.mjs"
  • Kein Anwendungsstart, kein Import und kein Klick nötig
  • setup.mjs war ein stark verschleiertes (obfuskiertes) Ladeprogramm
  • Nachladen einer zweiten, auf der Bun-Laufzeit basierenden Schadstufe
PHASE 3/6 · Sammlung von Zugangsdaten

ChainDrop durchsuchte gezielt Entwickler- und CI/CD-Systeme nach Geheimnissen und Zugangsdaten.

T1552.001 – Unsecured Credentials: Credentials In Files T1552.005 – Cloud Instance Metadata API
  • Unterschied gezielt zwischen Entwicklerrechnern und CI/CD-Runnern
  • Suchte in Dateien, Umgebungsvariablen und CLI-Werkzeugen
  • Zielte auf npm-Token, GitHub, AWS, Kubernetes und HashiCorp Vault
  • Nutzte gültige Provenance – ohne dass diese Autorisierung belegte
PHASE 4/6 · Selbstverbreitung

Mit gestohlenen npm-Schreibrechten kopierte sich der Wurm eigenständig in weitere Pakete.

T1195.002 – Compromise Software Supply Chain T1080 – Taint Shared Content
  • Ermittelte, welche Pakete das Opfer veröffentlichen durfte
  • Injizierte preinstall-Hook und Schadfracht, erhöhte Versionsnummer
  • Veröffentlichte manipulierte Pakete erneut – automatisierte Weiterverbreitung
  • StepSecurity-Snapshot: 444 Pakete und 2.212 vergiftete Versionen
PHASE 5/6 · Exfiltration

Die gesammelten Geheimnisse wurden verschlüsselt an die Angreifer-Infrastruktur übertragen.

T1560.001 – Archive Collected Data: Archive via Utility T1041 – Exfiltration Over C2 Channel
  • Daten wurden verpackt und komprimiert
  • Verschlüsselung mit AES-256-GCM
  • Übertragung u. a. an die Domain npm-cache[.]com
  • Betroffen: Zugangsdaten für npm, GitHub, AWS, Kubernetes, Vault
PHASE 6/6 · Auswirkung

Ein aktiver Supply-Chain-Angriff kompromittierte das npm-Ökosystem breitflächig mit sich fortpflanzendem Schaden.

  • Snyk: "This is an active software supply chain incident, not a proof of concept."
  • CSA Singapur nannte zwei Tage später über 1.300 betroffene Paketversionen
  • Zahlen beschreiben Reichweite, nicht bestätigte Opferzahlen
  • Betroffen ist, wer Node.js/npm direkt oder über Dienstleister einsetzt
Kurz & knapp beantwortet
Häufige Fragen zu diesem Vorfall
Bin ich von ChainDrop betroffen?
Betroffen ist grundsätzlich jeder, der Node.js/npm einsetzt – direkt oder über einen Dienstleister. Besonders gefährdet sind Entwickler-Rechner und automatisierte Bau-Systeme (CI/CD), auf denen Zugangsdaten liegen. Eine reine statische Website oder ein klassischer WordPress-/PHP-Auftritt ohne npm-Build ist über diesen Installationsweg nicht unmittelbar betroffen.
Wie prüfe ich, ob eines der befallenen Pakete installiert wurde?
Prüfen Sie Ihre Lockfiles (nicht nur package.json), da diese die exakt installierten Versionen festhalten. Ein schneller Überblick gelingt mit dem Befehl npm ls keyv flat-cache file-entry-cache cacheable-request cacheable @cacheable/utils cache-manager @cacheable/net @cacheable/node-cache @cacheable/memory ecto --all. Gleichen Sie das Ergebnis mit den von Snyk bestätigten Versionen ab, etwa keyv@6.0.0, flat-cache@6.1.24 oder cache-manager@7.2.10.
Warum reichte allein die Installation aus, um infiziert zu werden?
npm-Pakete dürfen sogenannte Lifecycle-Skripte mitbringen, die automatisch beim Installieren ausgeführt werden. Die manipulierten Pakete ergänzten den Eintrag "preinstall": "node setup.mjs", wodurch bei jedem npm install automatisch bösartiger Code startete. Es war kein Anwendungsstart, kein Import und kein Klick nötig.
Was muss ich jetzt konkret tun?
Machen Sie zuerst eine Bestandsaufnahme, ob überhaupt npm/Node.js im Spiel ist, und prüfen Sie Ihre Lockfiles gegen die bestätigten bösartigen Versionen. Suchen Sie in node_modules/**/package.json nach "preinstall": "node setup.mjs" sowie den Dateien setup.mjs, Math_Symbol.js oder math_init.js, ohne Paketcode auszuführen. Microsoft empfiehlt, betroffene Entwickler-Rechner und Bau-Systeme als kompromittiert zu behandeln und Zugangsdaten zu erneuern.
Stimmt es, dass zwei Milliarden Menschen betroffen sind?
Nein, das ist falsch. Die Zahlen wie über 400 Pakete oder zwei Milliarden beziehen sich auf die Reichweite im npm-Ökosystem und monatliche Downloads, nicht auf tatsächliche Opfer. Es gibt keine bestätigte öffentliche Zahl betroffener Organisationen oder personenbezogener Datensätze.
Weitere Security-News
Das könnte Sie auch interessieren
Kritische Elementor-Pro-Lücke: Angreifer können WordPress-Seiten komplett übernehmen
Ein Datei-Upload-Bug in Elementor Pro bis 4.2.1 erlaubt RCE ohne Login. Version 4.2.2 schließt die Lücke – jetzt aktualisieren!
Pods-Plugin: Kritische Lücke erlaubt Admin-Übernahme ohne Login
Eine kritische Schwachstelle im WordPress-Plugin Pods lässt Angreifer ohne Login Admin-Passwörter überschreiben. Über 100.000 Sites betroffen.
miniOrange SAML SSO: Kritischer Bypass macht Angreifer zu WordPress-Admins
Zwei kritische Auth-Bypässe im miniOrange SAML SSO Plugin erlauben gefälschte SAML Assertions – bis hin zum vollen Admin-Zugriff.