npm-Wurm
Neue Shai-Hulud-Welle: npm-Wurm greift verstärkt Pakete, GitHub und CI-Systeme an
Supply-Chain-Angriff auf npm: Shai-Hulud stiehlt Zugangsdaten und infiziert Repositorys
Ein neuer Angriff auf die Open-Source-Lieferkette trifft das npm-Ökosystem mit erheblicher Wucht. Die Schadsoftware Shai-Hulud hat bereits mehr als 400 Pakete in über 1.700 Versionen kompromittiert und verbreitet sich mithilfe gestohlener Zugangsdaten selbstständig weiter. Betroffene Unternehmen müssen davon ausgehen, dass nicht nur einzelne Softwarepakete, sondern auch Entwicklungsumgebungen, CI/CD-Systeme und darin gespeicherte Zugangsdaten kompromittiert wurden.
Das Security Research Team von JFrog hat eine neue Variante des npm-Wurms Shai-Hulud identifiziert . Ausgangspunkt der aktuellen Angriffswelle waren die weit verbreiteten Caching-Bibliotheken keyv, cacheable und mehrere Pakete der @cacheable-Familie. Besonders kritisch ist die Rolle von keyv: Die Bibliothek wird als transitive Abhängigkeit von zahlreichen bekannten Entwicklungswerkzeugen eingebunden und kann daher auch in Projekten vorhanden sein, deren Verantwortliche sie nicht bewusst installiert haben.
Nach Angaben der Sicherheitsforscher sind inzwischen mehr als 400 Pakete in über 1.700 Versionen betroffen. Da sich der Wurm automatisiert über gestohlene npm-Zugangsdaten verbreitet, wächst die Liste der kompromittierten Komponenten weiter. JFrog empfiehlt Anwendern, die eine betroffene Paketversion installiert haben, ihre Umgebung grundsätzlich als kompromittiert zu betrachten.
Gestohlene npm-Token treiben die Verbreitung an
Anders als klassische Supply-Chain-Angriffe beschränkt sich Shai-Hulud nicht auf eine vorher festgelegte Liste von Softwarepaketen. Sobald die Malware einen npm-Token mit Schreibrechten und einer Möglichkeit zur Umgehung der Zwei-Faktor-Authentifizierung findet, kann sie jedes Paket manipulieren, das sich mit diesem Token veröffentlichen lässt.
Dazu lädt der Wurm zunächst die aktuelle Version eines erreichbaren Pakets herunter, integriert seinen Schadcode und ergänzt ein preinstall-Skript. Anschließend erhöht er die Patch-Version und veröffentlicht das infizierte Paket erneut in der npm-Registry. Auf diese Weise kann ein einziges kompromittiertes Herausgeberkonto zahlreiche weitere Pakete und nachgelagerte Projekte infizieren.
Der Name Shai-Hulud verweist auf die riesigen Sandwürmer aus Frank Herberts Romanzyklus „Dune“. Die aktuelle Variante kennzeichnet die von ihr angelegten GitHub-Repositorys mit der Beschreibung „Shai-Hulud: Here We Go Again“.
Malware sucht systematisch nach Zugangsdaten
Die von JFrog analysierte Variante kombiniert mehrere Angriffsfunktionen in einem Schadprogramm. Sie durchsucht lokale Systeme, CI/CD-Umgebungen, Cloud-Plattformen, Kubernetes-Cluster und HashiCorp Vault nach Zugangsdaten und anderen Geheimnissen.
Dabei beschränkt sich die Suche nicht auf npm- oder GitHub-Token. Die Malware versucht unter anderem, Konfigurationsdateien und Zugangsdaten für AWS, Microsoft Azure, Google Cloud, Kubernetes, Datenbanken, SSH, VPN-Dienste sowie verschiedene KI-Plattformen und Entwicklerwerkzeuge auszulesen. Auch Umgebungsvariablen, Shell-Verläufe, Browser-Zugangsdaten und private Schlüssel können ins Visier geraten.
Die gesammelten Informationen werden komprimiert und verschlüsselt. Für die Exfiltration nutzt Shai-Hulud dynamisch ermittelte HTTPS-Endpunkte oder eigens angelegte öffentliche GitHub-Repositorys. Gestohlene npm- und GitHub-Token fließen anschließend wieder in den Angriffskreislauf ein und ermöglichen die Infektion weiterer Pakete und Repositorys.
Bereits das Öffnen eines Repositorys kann Schadcode ausführen
Besonders gefährlich ist die Verankerung des Wurms in Entwicklungsumgebungen. Shai-Hulud legt mehrere Dateien in erreichbaren GitHub-Branches ab, darunter Konfigurationen für Visual Studio Code und Claude Code. Eine manipulierte VS-Code-Konfiguration startet den Schadcode automatisch beim Öffnen eines Projektordners. Eine präparierte Claude-Konfiguration führt ihn beim Start einer Sitzung innerhalb des Repositorys aus. Damit kann bereits die alltägliche Arbeit mit einem infizierten Projekt zur Ausführung der Malware führen – ohne dass zuvor bewusst ein verdächtiges Skript gestartet wurde.
Die Manipulation kann sich auf bis zu 50 beschreibbare Branches eines Repositorys erstrecken. Geschützte Branches verhindern zwar einzelne Schreibversuche, doch bereits ein erreichbarer ungeschützter Branch reicht aus, um die schädlichen Dateien zu hinterlegen.
GitHub Actions werden zum Werkzeug für den Geheimnisdiebstahl
Verfügt ein gestohlener GitHub-Token über ausreichende Berechtigungen, manipuliert der Wurm außerdem GitHub-Actions-Workflows. Dabei legt er eine täuschend echt wirkende Workflow-Datei an, die vorhandene Repository- oder Organisations-Secrets in eine Datei schreibt und als Build-Artefakt bereitstellt.
Die Malware lädt dieses Artefakt anschließend herunter und löscht sowohl den temporären Branch als auch den Workflow-Lauf. Dadurch kann der Vorgang in oberflächlichen Prüfungen wie eine legitime Automatisierung erscheinen. Auf diesem Weg erbeutete npm- und GitHub-Token werden erneut zur Weiterverbreitung eingesetzt.
npm 12 blockiert den aktuellen Installationsweg
Einen wichtigen Schutz bietet npm ab Version 12. Dort werden preinstall-Lifecycle-Hooks standardmäßig nicht mehr ausgeführt. Da Shai-Hulud diesen Mechanismus für die Infektion während der Paketinstallation nutzt, wird die Malware über diesen konkreten Verbreitungsweg in entsprechenden Umgebungen nicht gestartet.
Dies bedeutet allerdings nicht automatisch, dass sämtliche Risiken ausgeschlossen sind. Bereits kompromittierte Repositorys, gestohlene Zugangsdaten oder manipulierte Entwicklungsumgebungen müssen unabhängig von der eingesetzten npm-Version untersucht werden.
Betroffene Systeme vollständig neu aufsetzen
Das bloße Entfernen eines kompromittierten npm-Pakets reicht nach Einschätzung von JFrog nicht aus. Wurde eine betroffene Version ausgeführt, sollten insbesondere Entwicklerrechner, Build-Systeme und CI-Runner isoliert und aus vertrauenswürdigen Images vollständig neu aufgebaut werden.
Zuvor sollten Unternehmen relevante Beweismittel wie Paketdateien, npm-Protokolle, CI-Logs, GitHub-Audit-Protokolle und Runner-Images sichern. Anschließend müssen sämtliche Zugangsdaten widerrufen und erneuert werden, auf die das betroffene System möglicherweise zugreifen konnte. Dazu gehören neben npm- und GitHub-Token auch Cloud-Zugänge, Kubernetes-Secrets, Vault-Inhalte, SSH-Schlüssel, Datenbankpasswörter, VPN-Zugangsdaten und Credentials für KI-Dienste.
Darüber hinaus sollten Sicherheitsteams alle Branches erreichbarer GitHub-Repositorys auf verdächtige VS-Code-, Claude- und GitHub-Actions-Dateien untersuchen. Die Prüfung darf sich nicht auf den jeweiligen Standard-Branch beschränken.
Automatisierte Angriffe verändern das Supply-Chain-Risiko
Shai-Hulud steht exemplarisch für eine neue Generation von Angriffen auf Software-Lieferketten. Der Schadcode kombiniert Credential Stealing, die automatisierte Manipulation von npm-Paketen und die Infektion von GitHub-Repositorys zu einem selbstverstärkenden Angriffskreislauf.
Damit verschiebt sich auch die Risikobetrachtung. Unternehmen müssen nicht nur direkt eingesetzte Open-Source-Komponenten kontrollieren, sondern ebenso deren transitive Abhängigkeiten, Veröffentlichungsprozesse, Entwicklerwerkzeuge und Berechtigungsmodelle. Besonders npm-Token mit weitreichenden Schreibrechten können im Fall einer Kompromittierung zum Ausgangspunkt einer großen Zahl weiterer Infektionen werden.
Die vollständige und fortlaufend aktualisierte Liste der betroffenen Pakete und Versionen stellt das JFrog Security Research Team in seiner technischen Analyse bereit.