Forschende von JFrog haben drei bösartige npm-Pakete entdeckt — aes-decode-runner-pro, postcss-minify-selector und postcss-minify-selector-parser —, die sich als legitime Build-Werkzeuge tarnen und einen mehrstufigen Remote-Access-Trojaner (RAT) für Windows ausliefern. Die Pakete missbrauchen das Vertrauen von Entwicklern in das PostCSS-Ökosystem: Der Name postcss-minify-selector-parser imitiert postcss-selector-parser — eine legitime Bibliothek mit mehr als 127 Millionen wöchentlichen Downloads. Insgesamt wurden die schädlichen Pakete mehr als 1000 Mal heruntergeladen. Entwickler, die eines dieser Pakete installiert haben, müssen sie umgehend entfernen, Artefakte säubern und alle Zugangsdaten auf betroffenen Maschinen rotieren.
Angriffsmechanismus: von npm install bis zum vollwertigen RAT
Nach Angaben der Forschenden wurden alle drei Pakete im letzten Monat vom Benutzer abdrizak veröffentlicht. Die Pakete aes-decode-runner-pro und postcss-minify-selector-parser geben sich als Utilities für AES-Codierung aus und hängen vom legitimen postcss-selector-parser ab. Das Paket postcss-minify-selector wird als Minifier für CSS-Selektoren beworben und hängt von postcss-minify-selector-parser ab. Unabhängig davon, welches der drei Pakete installiert wird, führt die Angriffskette zur Bereitstellung derselben Malware.
Die Infektionskette besteht aus mehreren Stufen:
- JavaScript-Dropper, im Paket integriert, schreibt das PowerShell-Skript
settings.ps1auf die Festplatte und führt es aus. - PowerShell-Loader lädt die nächste Stufe über
curl.exevon dem externen Servernvidiadriver[.]netherunter. - Das heruntergeladene ZIP-Archiv enthält die VBS-Datei
update.vbs, eine Python-Laufzeitumgebung, den Loaderloader.pyund eine Reihe kompilierter Python-Module (.pyd), die mit Nuitka erstellt wurden. - Das VBS-Skript richtet die Python-Umgebung ein und startet
loader.py, das die Kernlogik des RAT aktiviert.
Modulare Architektur des Trojaners
Der RAT ist als Satz nativer Python-Module implementiert, von denen jedes für eine eigene Funktion zuständig ist:
- config.pyd — Konstanten, Befehlskennungen, URL des Command-and-Control-Servers, Namen der Registry-Schlüssel
- api.pyd — Paketaustausch mit dem C2-Server über HTTP
- audiodriver.pyd — Haupt-Orchestrierungsschleife des RAT (Name zur Tarnung gewählt)
- command.pyd — Host-Profiling, Erkennung von virtuellen Maschinen, Dateiübertragung, Ausführung von Shell-Befehlen
- auto.pyd — Diebstahl von Anmeldeinformationen und Daten von Google-Chrome-Erweiterungen unter Umgehung des Mechanismus App-Bound Encryption (ABE)
- util.pyd — Hilfsfunktionen für die Arbeit mit tar/gzip-Archiven
Die Umgehung von ABE — einem Sicherheitsmechanismus von Chrome, der die Verschlüsselung an eine bestimmte Anwendung bindet — macht diesen RAT besonders gefährlich für Entwickler, die im Browser Passwörter und Zugriffstoken für Repositories, CI/CD-Systeme und Cloud-Dienste speichern.
Indikatoren einer Kompromittierung
- C2-Server:
95.216.92[.]207:8080 - Domain zum Herunterladen der Payload:
nvidiadriver[.]net
Welle von Supply-Chain-Angriffen auf npm
Die Entdeckung dieser Pakete fiel mit mehreren anderen Kampagnen zusammen, die auf das npm-Ökosystem abzielen, was auf einen systematischen Anstieg von Supply-Chain-Angriffen über Paketmanager hindeutet:
- Das Paket apintergrationpost liefert laut SafeDep einen Linux-RAT namens MYRA aus. Berichten zufolge kompiliert es bei der Installation einen nativen C-Rootkit, richtet drei Persistenzmechanismen ein, tarnt sich als systemd-Service und unterstützt dateilose Ausführung.
- Das Paket @withgoogle/stitch-sdk imitiert laut SafeDep das Tool Google Stitch AI und stiehlt Entwickler-Credentials aus acht Quellen: Claude Code, git config, ~/.git-credentials, SSH-Schlüssel, GitHub CLI, npm config, ~/.npmrc und ~/.docker/config.json. Die Daten werden an die Domain
stitch-production[.]orggesendet. - Ein Cluster aus fünf Paketen (procwire, routecraft, endpointmap, bytecraft, staticlayer), die beim Ausführen von npm install auf Windows-Hosts einen Dropper ausliefern und starten.
Darüber hinaus hat SafeDep einen Supply-Chain-Angriff über das Projekt Egonex-AI/Understand-Anything dokumentiert, bei dem der schädliche Code die Blockchain Tron als Steuerungsinfrastruktur nutzt — die Adresse der letzten Transaktion codiert den Hash einer BSC-Transaktion mit aktiver Payload.
Einschätzung der Auswirkungen
Trotz der relativ geringen Download-Zahlen (insgesamt rund 1016) liegt die Hauptgefahr in der Zielgruppe: Die Pakete richten sich an Entwickler, die PostCSS verwenden — eines der beliebtesten Tools zur Verarbeitung von CSS. Eine Kompromittierung der Entwicklermaschine eröffnet den Zugriff auf private Repositories, CI/CD-Secrets, Tokens von Cloud-Providern und Signaturschlüssel. Das Modul auto.pyd, das auf den Diebstahl von Chrome-Daten einschließlich Erweiterungen spezialisiert ist, kann Token von Passwort-Managern und Authentifizierungs-Sessions extrahieren.
Der Einsatz der Domain nvidiadriver[.]net zum Herunterladen der Payload ist ein typisches Social-Engineering-Muster: Der Domainname imitiert legitime NVIDIA-Software und kann bei einer oberflächlichen Analyse des Netzwerkverkehrs unauffällig wirken.
Empfehlungen zur Reaktion
- Projektabhängigkeiten prüfen auf das Vorhandensein der Pakete aes-decode-runner-pro, postcss-minify-selector, postcss-minify-selector-parser, apintergrationpost, @withgoogle/stitch-sdk, procwire, routecraft, endpointmap, bytecraft, staticlayer.
- Bösartige Pakete entfernen und sämtliche Artefakte: Dateien
settings.ps1,update.vbs,loader.py, Verzeichnisse mit der Python-Laufzeitumgebung und.pyd-Modulen. - Netzwerkverbindungen prüfen zu
95.216.92[.]207:8080,nvidiadriver[.]netundstitch-production[.]orgin Proxy- und DNS-Logs. - Alle Zugangsdaten rotieren auf betroffenen Maschinen: Chrome-Passwörter, SSH-Schlüssel, GitHub-/npm-/Docker-Tokens, CI/CD-Secrets.
- Richtlinien zur Prüfung von Abhängigkeiten einführen: Auditing-Tools einsetzen (npm audit, Socket, Snyk) und die Installation ungeprüfter Pakete mithilfe von Lockfiles und Richtlinien für erlaubte Pakete blockieren.
- Monitoring einrichten für das Starten von PowerShell und wscript.exe aus node_modules-Verzeichnissen — dies ist ein anomales Verhalten für npm-Pakete.
Dieser Fall zeigt eindrücklich, dass selbst ein kleines Hilfspaket, das eine populäre Build-Abhängigkeit imitiert, eine vollwertige mehrstufige Angriffskette verbergen kann. Die zentrale Maßnahme für Entwicklungsteams besteht darin, ihre Projekte umgehend auf die genannten Pakete zu prüfen, die aufgeführten Indikatoren einer Kompromittierung auf Ebene der Netzwerkinfrastruktur zu blockieren und einen automatisierten Abhängigkeitsaudit als verpflichtenden Schritt in der CI/CD-Pipeline zu verankern.