Bösartige npm-Pakete zielen auf Strapi CMS ab und hinterlassen Backdoors und stehlen Anmeldedaten
Cybersicherheitsforscher haben 36 bösartige Pakete im npm-Repository entdeckt, die sich als **Strapi CMS**-Plugins ausgeben. Diese Pakete enthalten bösartige Payloads, die darauf ausgelegt sind, **Redis**- und **PostgreSQL**-Datenbanken auszunutzen, Reverse Shells bereitzustellen, Anmeldedaten zu stehlen und persistente Implantate zu etablieren.

**SafeDep** berichtete: „Jedes Paket enthält drei Dateien (package.json, index.js, postinstall.js), hat keine Beschreibung, kein Repository und keine Homepage und verwendet die Version 3.6.8, um als ausgereiftes Strapi v3 Community-Plugin zu erscheinen.“
### Als legitime Plugins getarnt
Die bösartigen Pakete folgen einer Namenskonvention, die mit „strapi-plugin-" beginnt, gefolgt von Begriffen wie „cron“, „database“ oder „server“. Dies soll Entwickler dazu verleiten, sie herunterzuladen. Es ist wichtig zu beachten, dass offizielle Strapi-Plugins unter „@strapi/“ gescoped sind.
Diese Pakete wurden von vier Sock-Puppet-Konten hochgeladen: „umarbek1233“, „kekylf12“, „tikeqemif26“ und „umar_bektembiev1“ über einen Zeitraum von 13 Stunden. Die identifizierten Pakete umfassen:
* strapi-plugin-cron
* strapi-plugin-config
* strapi-plugin-server
* strapi-plugin-database
* strapi-plugin-core
* strapi-plugin-hooks
* strapi-plugin-monitor
* strapi-plugin-events
* strapi-plugin-logger
* strapi-plugin-health
* strapi-plugin-sync
* strapi-plugin-seed
* strapi-plugin-locale
* strapi-plugin-form
* strapi-plugin-notify
* strapi-plugin-api
* strapi-plugin-sitemap-gen
* strapi-plugin-nordica-tools
* strapi-plugin-nordica-sync
* strapi-plugin-nordica-cms
* strapi-plugin-nordica-api
* strapi-plugin-nordica-recon
* strapi-plugin-nordica-stage
* strapi-plugin-nordica-vhost
* strapi-plugin-nordica-deep
* strapi-plugin-nordica-lite
* strapi-plugin-nordica
* strapi-plugin-finseven
* strapi-plugin-hextest
* strapi-plugin-cms-tools
* strapi-plugin-content-sync
* strapi-plugin-debug-tools
* strapi-plugin-health-check
* strapi-plugin-guardarian-ext
* strapi-plugin-advanced-uuid
* strapi-plugin-blurhash
### Ausführung bösartigen Codes
Der bösartige Code ist im `postinstall`-Skript-Hook eingebettet. Dieses Skript wird während des „npm install“-Prozesses automatisch ausgeführt, ohne dass eine Benutzerinteraktion erforderlich ist. Es läuft mit den Berechtigungen des installierenden Benutzers und kann möglicherweise Root-Zugriff in CI/CD-Umgebungen und **Docker**-Containern missbrauchen.
### Payload-Entwicklung
Die Payloads entwickelten sich im Laufe der Kampagne:
1. **Redis-Ausnutzung:** Lokale Redis-Instanzen für Remote Code Execution durch Einfügen eines Crontab-Eintrags. Dies lädt ein Shell-Skript von einem Remote-Server herunter und führt es aus, wobei eine PHP-Web-Shell und eine Node.js-Reverse-Shell über SSH in das öffentliche Upload-Verzeichnis von Strapi geschrieben werden. Es versucht auch, die Festplatte nach Geheimnissen wie **Elasticsearch** und Seed-Phrasen für Kryptowährungs-Wallets zu scannen und ein **Guardarian**-API-Modul zu exfiltrieren.
2. **Docker Escape und Reverse Shells:** Kombination der Redis-Ausnutzung mit Docker-Container-Escape, um Shell-Payloads auf den Host zu schreiben. Es startet eine direkte Python-Reverse-Shell und schreibt einen Reverse-Shell-Trigger über Redis in das node_modules-Verzeichnis der Anwendung.
3. **Bereitstellung von Reverse Shells:** Bereitstellung einer Reverse Shell und Schreiben eines Shell-Downloaders über Redis.
4. **Erfassung von Anmeldedaten:** Scannen des Systems nach Umgebungsvariablen und PostgreSQL-Datenbankverbindungszeichenfolgen.
5. **Erweiterte Erkundung:** Sammeln von Umgebungs-Dumps, Strapi-Konfigurationen, Extraktion von Redis-Datenbanken, Abbildung der Netzwerktopologie sowie Docker/Kubernetes-Geheimnisse, kryptografische Schlüssel und Kryptowährungs-Wallet-Dateien.
6. **PostgreSQL-Ausnutzung:** Verbindung zur PostgreSQL-Datenbank des Ziels unter Verwendung hartcodierter Anmeldedaten und Abfragen von Strapi-spezifischen Tabellen nach Geheimnissen. Es werden auch Kryptowährungs-bezogene Muster gedumpt und versucht, eine Verbindung zu sechs Guardarian-Datenbanken herzustellen.
7. **Persistentes Implantat:** Bereitstellung eines persistenten Implantats zur Aufrechterhaltung des Fernzugriffs auf einen bestimmten Hostnamen („prod-strapi“).
8. **Diebstahl von Anmeldedaten:** Erleichterung des Diebstahls von Anmeldedaten durch Scannen hartcodierter Pfade und Starten einer persistenten Reverse Shell.
SafeDep erklärte: „Die acht Payloads zeigen eine klare Erzählung: Der Angreifer begann aggressiv (Redis RCE, Docker Escape), stellte fest, dass diese Ansätze nicht funktionierten, verlagerte sich auf Erkundung und Datenerfassung, verwendete hartcodierte Anmeldedaten für direkten Datenbankzugriff und entschied sich schließlich für persistenten Zugriff mit gezieltem Diebstahl von Anmeldedaten.“
### Gezielter Angriff?
Die Art der Payloads, der Fokus auf digitale Assets und die Verwendung hartcodierter Datenbankanmeldedaten und Hostnamen deuten auf einen gezielten Angriff auf eine Kryptowährungsplattform hin. Benutzer, die eines der aufgeführten Pakete installiert haben, sollten von einer Kompromittierung ausgehen und alle Anmeldedaten rotieren.
### Aktuelle Supply-Chain-Angriffe
Diese Entdeckung fällt mit einer Zunahme von Supply-Chain-Angriffen auf das Open-Source-Ökosystem zusammen:
* Ein **GitHub**-Konto namens „ezmtebo“ reichte über 256 Pull-Requests mit einer Payload zur Exfiltration von Anmeldedaten ein, die Geheimnisse über CI-Logs und PR-Kommentare stahl.
* Die „dev-protocol“-GitHub-Organisation wurde gekapert, um bösartige **Polymarket**-Handelsbots mit Typosquatted-npm-Abhängigkeiten zu verteilen, die Wallet-Private-Keys stehlen und eine SSH-Backdoor öffnen.
* Das **Emacs**-Paket „kubernetes-el/kubernetes-el“ wurde kompromittiert, wobei die Pwn Request-Schwachstelle in seinem GitHub Actions-Workflow ausgenutzt wurde, um das GITHUB_TOKEN des Repositorys zu stehlen und destruktiven Code einzuschleusen.
* Der „xygeni/xygeni-action“-GitHub Actions-Workflow wurde mithilfe gestohlener Maintainer-Anmeldedaten kompromittiert, um eine Reverse-Shell-Backdoor zu platzieren. **Xygeni** hat seitdem neue Sicherheitskontrollen implementiert.
* Das npm-Paket „mgc“ wurde durch Account-Übernahme kompromittiert, um bösartige Versionen mit einem Dropper-Skript zu veröffentlichen, das plattformspezifische Payloads abruft – einen Python-Trojaner für Linux und eine PowerShell-Variante für Windows. Dieser Angriff überschneidet sich mit dem jüngsten Supply-Chain-Angriff auf **Axios**, der **UNC1069** zugeschrieben wird.
* Ein bösartiges npm-Paket namens „express-session-js“ typosquatted „express-session“ und enthält einen Dropper, der einen Remote-Access-Trojaner (RAT) abruft.
* Das **PyPI**-Paket „bittensor-wallet“ (Version 4.0.2) wurde kompromittiert, um eine Backdoor bereitzustellen, die Wallet-Schlüssel exfiltriert.
* Ein bösartiges npm-Paket namens „@azure/service-bus-node“ enthält einen Dropper, der einen RAT von JSON Keeper abruft, um Datendiebstahl und persistenten Zugriff durchzuführen, indem er sich mit „216.126.237[.]71“ unter Verwendung der Socket.IO-Bibliothek verbindet.