Heute Morgen wurden wir auf einen groß angelegten Angriff auf npm aufmerksam gemacht. Dies scheint das Werk derselben Bedrohungsakteure zu sein, die hinter dem Nx-Angriff vom 27. August 2025 stecken. Dies wurde ursprünglich von Socket und StepSecurity veröffentlicht, die feststellten, dass 40 Pakete kompromittiert worden waren; seitdem wurden weitere 147 Pakete mit Malware infiziert, darunter Pakete von CrowdStrike.
Umfang, Reichweite und Auswirkungen dieses Angriffs sind erheblich. Die Angreifer verwenden größtenteils dasselbe Playbook wie beim ursprünglichen Angriff, haben aber ihr Vorgehen intensiviert. Sie haben es in einen vollständigen Wurm verwandelt, der diese Dinge automatisch ausführt:
- Secrets stehlen und sie öffentlich auf GitHub veröffentlichen
- Trufflehog ausführen und Cloud-Metadaten-Endpunkte abfragen, um Secrets zu sammeln
- Versuch, eine neue GitHub-Aktion mit einem Datenexfiltrationsmechanismus über webhook[.]site zu erstellen
- Die Repositories auf GitHub durchlaufen, auf die ein Benutzer Zugriff hat, und diese öffentlich machen
Seit unserer ersten Warnung heute Morgen haben wir die folgenden zusätzlichen Verhaltensweisen und wichtigen Details bestätigt. Für diejenigen, die es nicht wissen: Shai Hulud ist der Name des Wurms aus dem Dune-Franchise. Ein klares Indiz für die Absicht der Angreifer.

Um nicht von solchen Paketen kompromittiert zu werden, sehen Sie sich Aikido safe-chain an!
Was der Wurm tut
- Harvest: scannt den Host und die CI-Umgebung nach Secrets — process.env, Scan mit TruffleHog und Cloud-Metadaten-Endpunkte (AWS/GCP), die Instanz-/Dienst-Credentials zurückgeben.
- Exfiltration (1) — GitHub Repo: erstellt ein Repo namens Shai-Hulud unter dem kompromittierten Konto und committet einen JSON-Dump, der Systeminformationen, Umgebungsvariablen und gesammelte Secrets enthält.
- Exfiltration (2) — GitHub Actions → Webhook: legt einen Workflow ab
.github/workflows/shai-hulud-workflow.ymlder serialisiert${{ toJSON(secrets) }}, POSTet sie an einen Angreiferwebhook[.]siteURL und schreibt eine double-base64-Kopie in die Actions-Logs. - Propagate: nutzt alle gültigen npm-Tokens, die es findet, um Pakete, die der kompromittierte Maintainer kontrolliert, zu enumerieren und zu versuchen, diese zu aktualisieren (Supply-Chain-Propagation).
- Amplify: iteriert die zugänglichen Repositories des Opfers, macht sie öffentlich oder fügt den Workflow/Branch hinzu, der weitere Ausführungen und Leaks auslöst.
Offenlegung von Secrets
Wie beim ursprünglichen Nx-Angriff beobachten wir, dass die Angreifer einen Smash-and-Grab-Angriff durchführen. Die bösartige Payload veröffentlicht sowohl ein „Shai-Hulud“-Repository mit gestohlenen Credentials/Tokens, als auch, dass sie ein GitHub-Konto durchsucht und private Repositories öffentlich macht:


Selbst-Propagation über npm
Eines der auffälligsten Merkmale dieses Angriffs ist, dass er sich wie ein echter Wurm verhält. Anstatt sich auf ein einzelnes infiziertes Paket zur Verbreitung zu verlassen, ist der Code darauf ausgelegt, sich selbst in andere npm-Pakete neu zu veröffentlichen, die dem kompromittierten Maintainer gehören.
So funktioniert die Wurm-Logik:
- Download eines Ziel-Tarballs – es ruft eine bestehende Paketversion aus dem npm-Registry ab.
- Modifizieren
package.json– der Wurm erhöht die Patch-Version (z. B.1.2.3 → 1.2.4) und fügt einen neuen Lifecycle-Hook ein (postinstall) - Kopiert seine eigene Payload – das laufende Skript (
process.argv[1]) wird als in den Tarball geschriebenbundle.js. Dies stellt sicher, dass der Code, der ein Paket infiziert hat, nun im nächsten Paket enthalten ist. - Neuveröffentlichung des trojanisierten Pakets – der modifizierte Tarball wird gzipped und mithilfe der Anmeldeinformationen des Maintainers zurück zu npm gepusht.
Dieser Zyklus ermöglicht es der Malware, kontinuierlich jedes Paket zu infizieren, auf das ein Maintainer Zugriff hat. Jedes veröffentlichte Paket wird zu einem neuen Distributionsvektor: Sobald jemand es installiert, wird der Wurm ausgeführt, repliziert sich und verbreitet sich weiter im Ökosystem.
Kurz gesagt: Der Angreifer muss Pakete nicht manuell anvisieren. Sobald eine einzelne Umgebung kompromittiert ist, automatisiert der Wurm die Verbreitung, indem er sich die Veröffentlichungsrechte des Maintainers zunutze macht.
Für eine vollständige Analyse der Malware empfehlen wir, den getsafety-Beitrag zu lesen.
Betroffene Pakete
Aktuelle Entwicklung…
Behebungsempfehlungen
- Überprüfen Sie die von Ihnen verwendeten Versionen
- Leeren Sie Ihren npm-Cache
- Installieren Sie alle Pakete in Ihrem Repository neu
- Stellen Sie sicher, dass Sie eine Package-Lock-Datei verwenden und gepinnte Versionen nutzen
So erkennen Sie mit Aikido, ob Sie betroffen sind:
Wenn Sie ein Aikido-Benutzer sind, überprüfen Sie Ihren zentralen Feed und filtern Sie nach Malware-Problemen. Die Schwachstelle wird als kritisches 100/100-Problem im Feed angezeigt. Tipp: Aikido scannt Ihre Repositories nächtlich neu, wir empfehlen jedoch, auch einen vollständigen Rescan auszulösen.
Wenn Sie noch kein Aikido-Benutzer sind, erstellen Sie ein Konto und verbinden Sie Ihre Repositories. Unsere proprietäre Malware-Abdeckung ist im kostenlosen Plan enthalten (Ohne Kreditkarte).
Für zukünftigen Schutz sollten Sie Aikido SafeChain (Open Source) in Betracht ziehen, einen sicheren Wrapper für npm, npx, yarn... SafeChain integriert sich in Ihre aktuellen Workflows, indem es npm-, npx-, yarn-, pnpm- und pnpx-Befehle abfängt und die Pakete vor der Installation auf Malware überprüft, basierend auf Aikido Intel – Open Source Bedrohungsaufklärung. Stoppen Sie Bedrohungen, bevor sie Ihr System erreichen.

