Nach Angaben von Aikido spielte der Angreifer schädliche Dateien direkt in die Hauptzweige der betroffenen Projekte ein und erzeugte anschließend neue Paketveröffentlichungen. Weil der Build- und Veröffentlichungsprozess über die regulären GitHub-Actions-Workflows lief, erschienen die kompromittierten npm-Releases mit gültiger Provenienz. Das erschwert die Erkennung zusätzlich, weil die Veröffentlichungen technisch wie legitime Builds wirken.
Die vergifteten Pakete enthalten dem Bericht zufolge zwei Dateien: den Dropper setup.mjs und das Skript Math_Symbol.js zum Diebstahl sensibler Informationen. Zusätzlich wurde in der package.json der Eintrag „preinstall": “node setup.mjs” hinterlegt. Aikido warnt, dass setup.mjs damit automatisch ausgeführt wurde, sobald jemand npm install gegen eine betroffene Version ausführte, noch bevor die Installation abgeschlossen war.
Der Dropper lädt die JavaScript-Laufzeit Bun von der offiziellen GitHub-Veröffentlichung herunter, um anschließend Math_Symbol.js auszuführen. Nach dem Start des Infostealers löscht setup.mjs das temporäre Laufzeitverzeichnis wieder. Aikido zufolge sammelt der Schädling Entwickler- und Cloud-Zugangsdaten aus der kompromittierten Umgebung, verschlüsselt sie und sendet sie an ein öffentliches GitHub-Repository mit der Beschreibung „Shai-Hulud: Jetzt geht es wieder los“.
Die bösartige JavaScript-Datei ist laut Aikido stark verschleiert und verfügt über Selbstverbreitungsfunktionen. Dadurch kann sie Pakete anderer Maintainer infizieren, wenn diese zuvor ein bereits kompromittiertes Paket verwendet haben. Während Aikido beobachtete, dass die Bun-Datei das Skript Math_Symbol.js startet, hat BleepingComputer nach eigener Aussage auch kompromittierte npm-Pakete mit dem Skript math_init.js gesehen.
Die Malware durchsucht infizierte Entwickler-Systeme und CI/CD-Runner nach Zugangsdaten, die weiteren Zugriff auf Quellcode-Repositories und npm-Pakete ermöglichen könnten. Jeder Token wird dem Quelltext zufolge zunächst in Echtzeit gegen registry.npmjs[.]org/-/whoami geprüft, bevor er gestohlen wird. Die Cloud-Sicherheitsfirma Wiz erklärt zudem, dass die Domain „npm-cache[.]com“ ebenfalls zur Exfiltration von Daten genutzt werde und als starker Kompromittierungsindikator behandelt werden sollte.
Für betroffene Umgebungen ist die Lage ernst: Wurde eine anfällige Paketversion installiert, sollten Administratoren die Entwickler-Workstation oder den CI/CD-Runner laut Quelltext als kompromittiert betrachten, auch wenn das Paket später wieder entfernt wurde. Empfohlen werden ein Neuaufbau aus sicheren Backups oder von Grund auf, die Rotation aller Token, auf die aus der betroffenen Umgebung zugegriffen werden konnte, sowie die Prüfung von Protokollen auf unbefugte Zugriffe und von Repositories auf unerwartete Commits oder Änderungen.
Da sich der Angriff laut Quelltext weiter entwickelt, dürfte die Zahl der betroffenen Pakete und der exakt bösartigen Versionen weiter steigen. Listen kompromittierter npm-Pakete stellen Wiz, StepSecurity, Aikido, Socket und Ox Security bereit. Diese Unternehmen veröffentlichen auch Kompromittierungsindikatoren wie Hashes bösartiger Dateien und Artefakte sowie Netzwerkdaten.
