Ein zweiter Angriff auf Pakete im NPM-Repository wurde erkannt, durchgeführt mit einer Modifikation des sich selbst verbreitenden Wurms Shai-Hulud, der schadhafter Software in Abhängigkeiten einschleust. Infolge des Angriffs wurden schädliche Versionen von 605 Paketen veröffentlicht, die insgesamt mehr als 100 Millionen Downloads umfassen.
Um den Angriff durchzuführen, haben die Angreifer durch Phishing die Kontodaten des Betreuers eines der beliebten Pakete abgefangen, das als Abhängigkeit von einer Vielzahl von Paketen verwendet wird. Mit den erbeuteten Kontodaten veröffentlichten die Angreifer eine Version des Pakets, in die Code eingefügt wurde, um den Wurm bei der Installation des betroffenen Pakets in den Abhängigkeiten zu aktivieren. Der gestartete Wurm sucht nach Anmeldedaten in der aktuellen Umgebung, indem er das Tool TruffleHog herunterlädt und ausführt.
Wenn ein Verbindungstoken zum NPM-Katalog entdeckt wird, veröffentlicht der Wurm automatisch neue schadhafte Releases für Pakete, die in der aktuellen Umgebung entwickelt werden. Auf diese Weise wird die gesamte Abhängigkeitsstruktur infiziert. Neben dem NPM-Token speichert der Wurm auch Zugangskeys zu GitHub sowie zu den Cloud-Diensten AWS, Azure und GCP (Google Cloud Platform) sowie Umgebungsvariablen und andere vertrauliche Daten, die der TruffleHog-Scanner entdecken kann.
Die im System gefundenen vertraulichen Daten werden über die Erstellung von Repositories mit chaotischen Namen (z. B. „qzx15djl71alh6p80h“) und der Phrase „Sha1-Hulud: The Second Coming“ in der Beschreibung auf GitHub veröffentlicht sowie in kodierter Form in die Logs von GitHub Actions ausgegeben. Im erstellten Repository wird eine Datei im JSON-Format (z. B. jsonactionsSecrets.json oder contents.json) abgelegt, die eine Zeile mit base64-kodierten Informationen über das System, Umgebungsvariablen und erfasste Daten enthält. Um Informationen von GitHub-basierten CI-Systemen nach außen zu übertragen, erstellt der Wurm einen GitHub Actions-Handler mit dem Namen „.github/workflows/formatter_123456789.yml“ und konfiguriert einen Runner mit dem Namen SHA1HULUD.
Die Unterschiede zu ähnlichen Angriffen im September liegen in der anderen Methode zur Einspeisung von schadhafter Software in das Paket. In den durch den Wurm erzeugten schädlichen Versionen wird die Implementierung der JavaScript-Plattform Bun angekündigt. In die Datei package.json wird in den Abschnitt „preinstall“, der die Skripte definiert, die vor der Installation ausgeführt werden, der Befehl „node setup_bun.js“ hinzugefügt.

In der Datei „setup_bun.js“ befindet sich Code zur Ausführung eines obfuskierten Skripts „bun_environment.js“, das den Code des Wurms enthält. Für seine weitere Verbreitung findet der Wurm den Code der Pakete, ändert die Datei package.json (erhöht die Versionsnummer und inkludiert den Aufruf von setup_bun.js), fügt die Dateien setup_bun.js und bun_environment.js hinzu, packt das Paket neu und führt den Befehl „npm publish“ aus, um die neue Version zu veröffentlichen.
Unter den kompromittierten beliebten Paketen sind: @zapier/zapier-sdk (2,8 Millionen Downloads pro Woche), @posthog/core (2,8 Millionen), posthog-node (1,5 Millionen), @asyncapi/specs (1,4 Millionen), @postman/tunnel-agent (1,2 Millionen). Es wird angenommen, dass der Angriff mit der Kompromittierung des begleitenden Pakets @asyncapi/specs begann.
Quelle: opennet.ru
