Wie Microsoft erläutert, durchsucht die Malware nach der Ausführung Entwickler-Arbeitsplätze sowie CI/CD-Umgebungen nach Zugangsdaten für NPM, GitHub, Cloud-Dienste und Infrastruktur. Mit den erbeuteten Identitäten authentifiziert sie sich demnach bei NPM, GitHub, Amazon Web Services, Kubernetes und HashiCorp Vault. Auf diese Weise kann sie Pakete, Repositories, Workflow-Geheimnisse, Cloud-Parameter und Werte aus Geheimnisspeichern auflisten.
Auf infizierten Systemen greift die Schadsoftware laut Beschreibung alle auffindbaren Geheimnisse ab, verschlüsselt sie und leitet die Daten anschließend an einen dynamischen HTTPS-Endpunkt oder an von den Angreifern angelegte öffentliche GitHub-Repositories weiter. Diese Repositories tragen laut Bericht die Beschreibung „Shai-Hulud: Jetzt geht es schon wieder los“.
JFrog zufolge nutzt die Malware gestohlene NPM-Zugangsdaten, um vergiftete Versionen sämtlicher Pakete zu veröffentlichen, die auf dem kompromittierten System erreichbar sind. Zusätzlich missbraucht sie kompromittierte GitHub-Zugangsdaten und GitHub Actions, um weitere Repositories zu infizieren und dort erneut Zugangsdaten abzugreifen. Microsoft beschreibt den Ablauf genauer: Sobald ein NPM-Veröffentlichungstoken vorliegt, listet die Malware die für die kompromittierte Identität verfügbaren Pakete auf, lädt deren aktuelle Tarballs herunter, fügt Malware und Setup-Loader ein, ergänzt einen Preinstall-Hook, erhöht die Patch-Version und veröffentlicht die veränderten Pakete erneut.
Darüber hinaus kann die Schadsoftware laut Microsoft mit gestohlenen GitHub-Zugangsdaten Konfigurationsdateien für Claude und Visual Studio Code in Repositories einschleusen. Das soll Persistenz schaffen und einen zusätzlichen Infektionspfad von Entwickler zu Entwickler eröffnen.
StepSecurity berichtet, dass die Malware viele historische Versionen kompromittierter Pakete erneut veröffentlichte. Deshalb stieg die Zahl der beobachteten bösartigen Paketvarianten am 4. August innerhalb von weniger als vier Stunden auf 2.212. Alle infizierten Versionen enthielten demnach einen Preinstall-Dropper, der neben der legitimen JavaScript-Laufzeit Bun auch 710 Kilobyte verschleierten Code der zweiten Stufe nachlud, in dem die eigentliche Malware steckt.
Als weitere technische Besonderheit nutzt der Wurm laut Bericht die Ethereum-Blockchain für seine Kommando-und-Kontroll-Funktion, eine Technik namens EtherHiding. Socket verweist zudem auf einen „Totmannschalter“ auf Host-Ebene: Nachdem die Malware auf macOS und Linux Persistenz erreicht hat, fragt sie alle 60 Sekunden über das gestohlene GitHub-Token die GitHub-API ab. Funktioniert das Token nicht mehr, löscht sie ihren Zustand und beendet sich. Nach 24 Stunden räumt sie sich laut Socket ebenfalls selbst weg.
Entwickler, die eine der infizierten Paketversionen installiert haben, sollten ihre Systeme als kompromittiert betrachten. Empfohlen wird, die Malware zu entfernen, CI-Runner und Build-Maschinen neu aufzusetzen, möglicherweise kompromittierte Zugangsdaten zu widerrufen und zu wechseln sowie GitHub-Repositories auf auffällige Aktivitäten zu prüfen. JFrog rät außerdem, betroffene Systeme zu isolieren und Paket-Tarballs, NPM-Protokolle, CI-Protokolle, GitHub-Audit-Logs und Runner-Images vor der Bereinigung zu sichern, um das Zeitfenster der Offenlegung eingrenzen zu können.
