Avvelenamento della Pipeline CI/CD: Poisoned Pipeline Execution (T1677)

La tecnica Poisoned Pipeline Execution descrive la manipolazione dei processi di integrazione e distribuzione continua (CI/CD) tramite l'iniezione di codice malevolo nel flusso di build. Catalogata sotto la tattica TA0002 (Execution), questa tecnica sfrutta la fiducia implicita che le organizzazioni ripongono nelle proprie pipeline automatizzate, trasformandole in vettori di esecuzione arbitraria all'interno di ambienti privilegiati.

MITRE distingue tre varianti operative. Nella Direct Pipeline Execution l'attaccante modifica direttamente il file di configurazione CI, come gitlab-ci.yml, inserendo comandi per esfiltrare credenziali o esportarle come artefatti. Nella Indirect Pipeline Execution il codice ostile viene iniettato in file richiamati dalla configurazione: makefile, script di test, linter. La variante più insidiosa è la Public Pipeline Execution, dove un attore esterno privo di accesso al repository crea una pull request malevola da un fork, sfruttando trigger come pull_request_target di GitHub Actions che espongono i segreti anche a workflow provenienti da fork.

L'impatto operativo è severo: furto di credenziali cloud, movimento laterale verso runner self-hosted collocati nella rete aziendale, e soprattutto la trasformazione della compromissione in Supply Chain Compromise quando il codice avvelenato viene distribuito ai consumatori downstream. Con 2 mitigazioni documentate e una detection strategy dedicata (DET0533) focalizzata su workflow SaaS, la tecnica rappresenta oggi uno dei vettori più critici nell'ecosistema DevSecOps.

Un esercizio red team su T1677 parte dalla ricognizione della superficie CI/CD del target. Il primo passo è enumerare i workflow esposti nel repository, cercando trigger pericolosi. Su GitHub Actions il comando grep -r "pull_request_target" .github/workflows/ rivela immediatamente workflow potenzialmente vulnerabili. Il tool gato (open source, GitHub Actions Attack Toolkit di Praetorian) automatizza questa fase: analizza organizzazioni intere identificando repository con self-hosted runner e trigger sfruttabili.

Per la variante Public Pipeline Execution, la catena tipica consiste nel forkare il repository target, modificare uno script richiamato dal workflow (ad esempio un file di test JavaScript o un Makefile), e aprire una pull request. Se il workflow usa pull_request_target combinato con un checkout esplicito del ramo della PR, il codice del forkatore viene eseguito con accesso ai segreti del repository originale. Un payload minimale per esfiltrare i segreti si riduce a poche righe che leggono le variabili d'ambiente e le trasmettono a un endpoint controllato dall'attaccante tramite curl.

Per la Direct Pipeline Execution il presupposto è aver ottenuto credenziali di sviluppatore con permessi di push. Modificando gitlab-ci.yml o .github/workflows/build.yml si può aggiungere uno step che stampa in log codificati in base64 i valori di env — utile in laboratorio per dimostrare l'esfiltrazione via artifact download.

Strumenti utili in laboratorio includono Chain-bench (open source, di Aqua Security) per audit di supply chain conformi al framework CIS, Checkov (open source) e KICS (open source) per identificare misconfigurazioni nei workflow prima di sfruttarle, Legitify (open source, di Legit Security) per enumerare posture GitHub/GitLab. Per la simulazione di runner compromessi, Gitleaks (open source) rileva segreti hardcoded che possono essere spostati durante il post-exploitation.

Una catena d'attacco completa in ambiente lab prevede: (1) enumerazione workflow con gato, (2) identificazione di uno step che esegue codice utente (build npm, esecuzione test), (3) fork e submission di PR con payload nel file richiamato, (4) cattura dei segreti dal log della workflow run, (5) uso dei token GitHub esfiltrati per pivotare verso altri repository dell'organizzazione tramite l'API con curl -H "Authorization: token $TOKEN". Se il runner è self-hosted, il post-exploitation include reverse shell verso il segmento di rete interno, dimostrando l'impatto di lateral movement.

Tutte le attività vanno condotte esclusivamente su repository di proprietà o con autorizzazione scritta esplicita, preferibilmente in organizzazioni GitHub dedicate al testing.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo

TEST GRATUITO
2 minuti · 7 domande Che professionista cyber sei? Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.