Fünf npm-Versionen von jscrambler mit infostealer in Rust kompromittiert, die --ignore-scripts umgeht

Der Angreifer kompromittierte am 11. Juli das npm-Konto von jscrambler und veröffentlichte fünf bösartige Versionen des Tools, das von 43.000 Unternehmen, darunter Fortune-500-Kunden, verwendet wird, mit einem in Rust kompilierten Infostealer, der Browseranmeldedaten und Bitwarden-Tresore erfasst.
Fünf Versionen des offiziellen npm-Pakets von jscrambler, einem JavaScript-Obfuskationstool, das von mehr als 43.000 Unternehmen, einschließlich Kunden der Fortune 500, verwendet wird, wurden am 11. Juli mit einem in Rust kompilierten Infostealer kompromittiert, der gespeicherte Anmeldedaten in Browsern und Bitwarden-Passwortmanagern erfasst. Der Angriff hielt bösartige Versionen etwa drei Stunden lang auf npm verfügbar. Die Sicherheitsplattform Socket entdeckte die erste kompromittierte Version sechs Minuten nach ihrer Veröffentlichung.
Fünf Versionen, zwei Taktiken, ein Payload
Die Versionen 8.14.0, 8.16.0, 8.17.0, 8.18.0 und 8.20.0 wurden vom Angreifer in Intervallen mit sauberen Versionen veröffentlicht, die die Wartungsarbeiten von jscrambler in einem Versuch zur Behebung bereitstellten, was darauf hindeutet, dass die Kontrolle über das Konto oder die CI/CD-Pipeline während des gesamten Vorfalls aufrechterhalten wurde.
Die Versionen 8.14.0 bis 8.17.0 operierten über einen preinstall-Hook: Bei der Ausführung von npm install extrahierte das Skript dist/setup.js ein natives Binary je Betriebssystem (Linux, Windows und macOS) und führte es im Stillen aus. Ab Version 8.18.0 änderte der Angreifer die Vorgehensweise. Der Payload wurde nun beim Import des Hauptmoduls über dist/index.js und dist/bin/jscrambler.js geladen. Diese Änderung umgeht das Flag --ignore-scripts von npm, ein Parameter, der von Sicherheitsteams in Unternehmen als Barriere gegen nicht vertrauenswürdige Installationsskripte verwendet wird.
Was der Infostealer erfasste
Das Rust-Binary, das in allen fünf kompromittierten Versionen identisch war, durchsuchte die Maschine des Entwicklers nach Profilen von Chromium-Browsern (Chrome, Brave, Edge), Daten des lokalen Tresors der Bitwarden-Erweiterung und aktiven Sessions von Steam. Die gesammelten Informationen wurden über TLS an einen Sammelserver übertragen. Unter Windows stellte die Malware Persistenz über den Aufgabenplaner her; unter macOS über LaunchAgents. Linux-Maschinen erhielten nur die sofortige Exfiltration ohne Persistenzmechanismus.
Laut der Analyse von Socket ermöglichte der unbefugte Zugriff auf das npm-Konto oder die CI/CD-Pipeline von jscrambler das Veröffentlichen von signierten Versionen unter der legitimen Identität des Pakets, wodurch die Erkennung durch die Inspektion von Metadaten ineffektiv wurde.
Warum der Vektor direkte Auswirkungen auf Finanzproduktionsumgebungen hat
jscrambler wird von Unternehmen zur Obfuskation von JavaScript in der Produktion und zur Einhaltung des PCI DSS v4 verwendet, des Sicherheitsstandards der Kreditkartenindustrie, der den Schutz von Skripten auf Checkout-Seiten erfordert. Mit 60.000 monatlichen Downloads auf npm zirkuliert das Paket routinemäßig in den kontinuierlichen Integrations-Pipelines von Einzelhändlern, Banken und Zahlungsabwicklern in den USA und im Vereinigten Königreich, zwei der Märkte, in denen der PCI DSS v4 ab 2025 obligatorisch wird.
Die Kompromittierung eines Werkzeugs zum Schutz von Code, das von Unternehmen im Finanzsektor verwendet wird, stellt einen Vektor zweiter Ordnung dar: Der Angreifer hat nicht den Endkunden infiltriert, sondern das Tool, das der Kunde zum Schutz seiner eigenen Kunden verwendet. Dieses Muster wurde bei SolarWinds (2020) dokumentiert, als die Netzüberwachungssoftware zum Zugang zu amerikanischen Regierungsbehörden wurde, und bei 3CX (2023), als eine Unternehmenskommunikationssoftware für die Verbreitung von Malware an Unternehmen in mehr als 60 Ländern Trojanisiert wurde.
Was über das Ausmaß des Schadens bekannt ist
Socket hat nicht bekannt gegeben, wie viele Organisationen die kompromittierten Versionen vor der Entfernung installiert haben. jscrambler hatte bis zum Zeitpunkt der Veröffentlichung dieses Berichts keine öffentliche Mitteilung über die Anzahl der betroffenen Maschinen veröffentlicht. Die fünf Versionen wurden innerhalb der drei Stunden des Vorfalls von npm entfernt, aber jede Umgebung, die während dieses Zeitraums npm install gegen eine der kompromittierten Versionen ausgeführt hat, sollte bis zum Beweis des Gegenteils als kompromittiert betrachtet werden.
Entwickler, die die Versionen 8.14.0, 8.16.0, 8.17.0, 8.18.0 oder 8.20.0 installiert haben, sollten umgehend gespeicherte Passwörter in Chrome, Brave und Edge rotieren, Tokens von Bitwarden widerrufen und geplante Prozesse unter Windows sowie LaunchAgents unter macOS überprüfen. Das Fehlen eines Persistenzmechanismus unter Linux bedeutet nicht das Fehlen von Schäden: Die Exfiltration erfolgt zum Zeitpunkt der Installation, bevor jegliche Persistenz erforderlich ist.