Zum Inhalt springen

Shai-Hulud-Wurm trifft keyv: Lieferketten-Angriff verseucht über 440 npm-Pakete

Am 4. August 2026 hat sich der npm-Wurm Shai-Hulud zurückgemeldet, und zwar mit voller Wucht. Angreifer übernahmen das GitHub-Konto des Maintainers hinter keyv, einer weit verbreiteten Key-Value-Bibliothek für Node.js, und schleusten darüber Schadcode in die gesamte Paketfamilie ein. Innerhalb weniger Stunden hatte sich der Wurm selbstständig auf mehr als 440 npm-Pakete ausgebreitet. Zusammengerechnet kommen die betroffenen Pakete auf über zwei Milliarden Installationen pro Monat, was diesen Vorfall zu einem der größten Lieferketten-Angriffe im npm-Ökosystem macht.

Wer in seinem Projekt npm-Pakete verwendet, sollte jetzt prüfen, ob eine der befallenen Versionen in den Abhängigkeiten steckt. Der Angriff läuft über den Installationsschritt und stiehlt automatisiert Zugangsdaten von jedem Entwicklerrechner und jedem Build-Server, auf dem eine verseuchte Version installiert wurde.

Wie der Angriff ablief

Der Einstieg gelang über das gekaperte GitHub-Konto des keyv-Maintainers. Die Angreifer pushten den Schadcode direkt in den main-Branch und schnitten sofort einen neuen Release. Dadurch landeten die manipulierten Versionen mit gültiger, über GitHub Actions signierter Provenance auf npm, was die Erkennung zusätzlich erschwerte.

Jedes befallene Paket erhielt zwei zusätzliche Dateien, setup.mjs und Math_Symbol.js, sowie einen „preinstall“: „node setup.mjs“-Eintrag in der package.json. Wer eine betroffene Version mit npm install installierte, führte damit automatisch setup.mjs aus, noch bevor die eigentliche Installation abgeschlossen war. setup.mjs ist ein verschleierter Dropper, der die Bun-Laufzeitumgebung in Version 1.3.13 von GitHub nachlädt und damit die eigentliche Schadsoftware Math_Symbol.js startet, eine stark obfuskierte Datei von rund 728 Kilobyte.

Elastic Security Labs führt den Wurm dieser Welle unter dem Namen CHAINDROP, andere Sicherheitsfirmen tracken ihn als Mini Shai-Hulud oder keyv-shai-hulud. Es handelt sich um dieselbe Malware-Familie.

Was die Schadsoftware stiehlt

Das Payload durchsucht das System systematisch nach Zugangsdaten und Geheimnissen. Betroffen sind unter anderem:

  • npm-Tokens aus ~/.npmrc und weiteren Konfigurationsdateien, jeweils live gegen die Registry validiert
  • GitHub-Tokens in mehreren Formaten (ghp_, gho_, ghs_ und OIDC-JWTs), auf CI-Runnern auch direkt aus dem Speicher des Runner-Prozesses
  • AWS-Zugangsdaten aus Konfigurationsdateien, Umgebungsvariablen, dem Instance Metadata Service und dem AWS Secrets Manager
  • Kubernetes-Secrets über den Service-Account-Token und den KUBECONFIG
  • HashiCorp-Vault-Tokens aus sechs verschiedenen Quellen samt Auslesen aller KV-Stores
  • Stripe- und Slack-Tokens sowie ein generischer Dateiscan über rund 200 Suchmuster, der .env-Dateien, private Schlüssel, SSH-Keys, Terraform-State, Docker-Zugangsdaten, KeePass-Datenbanken und VPN-Konfigurationen einsammelt

Die gesammelten Daten werden verschlüsselt und in öffentliche GitHub-Repositories hochgeladen, deren Beschreibung den Text Shai-Hulud: Here We Go Again trägt. Zum Zeitpunkt der Analyse existierten rund 1.300 solcher Repositories. Schlägt der Upload fehl, weicht die Schadsoftware auf die Domain npm-cache[.]com aus, die am 22.05.2026 registriert wurde. Die Adresse dieser Ausweich-Infrastruktur wird dynamisch aus einem Ethereum-Smart-Contract (0xE1f2395ee43e45A1556EC6438a88c31B83493103) gelesen, sodass die Angreifer ihre Server jederzeit wechseln können, ohne das Payload anzufassen.

Neu in dieser Welle: Angriff über KI-Coding-Tools

Diese Kampagne bringt eine Fähigkeit mit, die frühere Wellen nicht hatten. Findet der Wurm ein GitHub-Token vom Typ ghs_, schreibt er sich in bis zu 50 Branches eines Repositories und ergänzt dort bösartige Hooks in .claude/settings.json und .vscode/tasks.json. Dadurch wird das Payload automatisch ausgeführt, sobald ein Entwickler das Repository das nächste Mal in VS Code öffnet oder eine Claude-Code-Sitzung darin startet, ganz ohne npm install. Die Commits sind als Nutzer claude mit einer harmlos wirkenden Commit-Nachricht getarnt, um zwischen echten Änderungen nicht aufzufallen.

Zur Verbreitung nutzt der Wurm gestohlene npm-Tokens: Er listet alle Pakete auf, für die ein Token Veröffentlichungsrechte hat, erhöht die Patch-Version, fügt den preinstall-Hook und die Schaddateien ein und veröffentlicht das manipulierte Paket erneut. So sprang die Infektion vom ursprünglichen Maintainer auf über 400 weitere Pakete anderer Herausgeber über, darunter Pakete großer Organisationen.

Zu den zuerst kompromittierten Kernpaketen gehören unter anderem keyv in Version 6.0.0 (rund 600 Millionen Downloads pro Monat), flat-cache 6.1.24, file-entry-cache 11.1.6, cacheable-request 13.0.20, cacheable 2.5.1, @cacheable/memory 2.2.1, cache-manager 7.2.10, @cacheable/node-cache 3.1.2 und @cacheable/utils 2.5.1. Über die Wurm-Verbreitung wurden auch Pakete wie @deliveroo/reevent, @or-sdk/invitations, @picsart/ai-sdk, @qlik/embed-runtime und picasso.js erreicht.

Die genaue Gesamtzahl geht je nach Sicherheitsfirma auseinander, was bei einer laufenden Wurm-Ausbreitung normal ist. Endor Labs verifizierte 373 Pakete, Aikido zählte mindestens 444 Pakete über 1.381 Versionen, und Cloudsmith trackte 2.236 betroffene Versionen. Die meisten schädlichen Versionen wurden inzwischen von npm entfernt, einzelne können jedoch noch verfügbar sein.