Un framework Red Team per CI/CD per dimostrare i rischi di sicurezza delle pipeline di build.
Framework Red Team per CI/CD
Come Metasploit, ma per pipeline CI/CD.
Realizzato dagli autori di poutine SAST per pipeline di build presso BoostSecurity Labs.

Attenzione: Questo strumento è solo per test di sicurezza autorizzati.
SmokedMeat esiste perché le minacce alle pipeline CI/CD sono profondamente sottovalutate. La formazione tradizionale sulla sicurezza raramente copre gli attacchi alla supply chain, lasciando i difensori impreparati contro tecniche che gli avversari sfruttano attivamente in natura.
L'abbiamo costruito per dare ai team di sicurezza la possibilità di imparare, esercitarsi e convalidare le difese contro tecniche di attacco CI/CD avanzate attraverso esercitazioni red team realistiche.
Usalo solo contro sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta.
SmokedMeat è un framework di post-exploitation per pipeline CI/CD. Punta a un'organizzazione GitHub, lascia che trovi workflow vulnerabili, distribuisci un impianto su un runner compromesso, poi fai pivot attraverso provider cloud, estrai segreti e mappa il raggio di esplosione, il tutto da un'interfaccia utente a terminale.
Filosofia: Audace e rumorosa. Questo non è uno strumento di elusione EDR. È un framework dimostrativo che mostra quanto in profondità arriva una compromissione CI/CD prima che qualsiasi cosa attivi un avviso.
A chi è rivolto:
Per provare SmokedMeat per la prima volta, installa Docker e make. Go non è necessario.
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
make quickstart è la prima esecuzione consigliata. Avvia lo stack di avvio rapido della release stabile in locale e lancia la TUI operatore (Counter) contro il teamserver C2 (Kitchen).
Prima esecuzione consigliata:
whoolipublic_repo⚠ Preferisci un PAT classico. I PAT a grana fine possono essere troppo restrittivi e potrebbero bloccare il test di target pubblici in altre org, incluso whooli.
whooli è il parco giochi di attacco CI/CD deliberatamente vulnerabile di SmokedMeat. È il primo target consigliato per il percorso pubblico.
La procedura guidata ti accompagna attraverso:
repo.whooli o la tua org/repoPer il flusso completo della sfida, consulta la guida whooli o vai direttamente all'org GitHub whooli.
Quando hai finito:
make quickstart-down # Ferma i container
make quickstart-purge # Ferma ed elimina tutti i dati
Se invece vuoi lavorare dal sorgente, vedi Sviluppo.
Se stai contribuendo o iterando sull'albero dei sorgenti in locale, installa Go 1.26+ e usa l'avvio rapido di sviluppo:
make dev-quickstart
make dev-quickstart costruisce l'immagine locale smokedmeat-cloud-shell, avvia cloudflared, nats e il teamserver C2 (Kitchen), poi lancia la TUI operatore dal sorgente.
Se vuoi prima l'infrastruttura e la TUI operatore dopo:
make dev-quickstart-up
make dev-quickstart-counter
Quando hai finito:
make dev-quickstart-down # Ferma i container
make dev-quickstart-purge # Ferma ed elimina tutti i dati
Maggiori dettagli sulle modalità di deployment e sullo sviluppo locale sono in docs/deployment.md.
Counter controlla la presenza di nuove release di SmokedMeat all'avvio. Può essere disabilitato impostando la variabile d'ambiente SMOKEDMEAT_DISABLE_VERSION_CHECK.
| Termine standard | Nome SmokedMeat | Descrizione |
|---|---|---|
| TUI operatore | Counter | Interfaccia a terminale per analisi, distribuzione del payload e flusso di post-sfruttamento. |
| Teamserver C2 | Kitchen | Server API e WebSocket per sessioni operatore, stager, callback e stato del grafo. |
| Impianto | Brisket | Agente consegnato ai runner CI compromessi per beaconing, esecuzione comandi e pivot. |
| Vista grafo nel browser | Browser View | Grafo di attacco live servito dal teamserver C2 su /graph. |
| Modalità | Quando usarla | Punto di ingresso |
|---|---|---|
| Avvio rapido | Esecuzione più veloce sulla release fissata | make quickstart |
| Avvio rapido sviluppo | Quando lavori sull'albero dei sorgenti in locale | make dev-quickstart |
| Teamserver ospitato | Per un engagement reale con un dominio stabile | docs/deployment.md |
Il teamserver ospitato esegue il teamserver C2 su un host dedicato e la TUI operatore nativamente su ciascuna workstation operatore.
Ad alto livello, la TUI operatore (Counter) comunica con il teamserver C2 (Kitchen), che gestisce gli impianti (Brisket) in esecuzione sui runner CI compromessi e serve il grafo di attacco live.
┌──────────────┐
│ SSH AGENT │
│ (Auth) │
└──────┬───────┘
│
▼
┌──────────────┐ ┌──────────────┐
│ THE COUNTER │ ───────────────▶│ THE KITCHEN │
│ (Operator) │ WebSocket │ (Teamserver) │
│ Bubbletea │◀─────────────── │ │
│ TUI │ Events/Graph │ ┌──────────┐ │
└──────────────┘ │ │ Database │ │
│ └──────────┘ │
┌──────────────┐ │ │
│ BROWSER │ ───────────────▶│ │
│ Graph View │ WebSocket │ │
│ Visualizer │◀─────────────── │ │
└──────────────┘ Live Updates └──────────────┘
│ ▲
│ │
Creates PR │ │ Stager scarica binario impianto
│ │ Impianto HTTP Beacon/Comandi
▼ │
┌────────────────────────────────────────────┴──────────────────────────────────┐
│ GITHUB.COM │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────────────────┐ │
│ │ PR malevolo │ innesca │ GitHub Actions Runner │ │
│ │ (Workflow │─────────▶│ │ │
│ │ vulnerabile) │ │ ┌────────────┐ ┌────────────────┐ │ │
│ └─────────────────────┘ │ │ Stager │─────▶│ THE BRISKET │ │ │
│ │ │ │ │ (Impianto) │ │ │
│ │ └────────────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
Dettagli completi in docs/FEATURES.md.
| Categoria | Capacità |
|---|---|
| Ricognizione | Rilevamento automatico di 6 piattaforme CI (GitHub Actions, GitLab CI, Azure DevOps, CircleCI, Jenkins, Bitbucket). Classificazione dei segreti, sonda della disponibilità OIDC, raccolta di metadati del runner. |
| Estrazione segreti | Scansione della memoria del processo Runner.Worker tramite /proc per recuperare secrets.*, vars.* e mappe dei permessi di GITHUB_TOKEN che GitHub nasconde dai log. |
| Analisi vulnerabilità | SAST poutine integrato per vulnerabilità di injection, trigger pericolosi e classificazione del gate if: dei workflow. Scansione approfondita Gitleaks per chiavi private e PAT nella cronologia git. |
| Consegna | 5 metodi automatizzati: PR, issue, commento, LOTP, workflow dispatch - più modalità solo copia e manuale. Supporto PR bozza, chiusura automatica su callback, preflight dispatch lato server. |
| Payload di injection | Generazione di payload sensibili al contesto per 8 vettori di injection (nome branch, titolo/corpo PR, messaggio commit, titolo/corpo issue, github-script, bash run) con tecniche consapevoli dei vincoli. |
| LOTP | Catalogo Living Off The Pipeline: 15 strumenti di build (npm, pip, cargo, make, docker, gradle, maven e altri) con payload basati su file di configurazione per esecuzione di codice durante install/build/test. |
| Avvelenamento cache | Classificazione scrittore/vittima, predizione esatta della chiave cache, staging di archivi tramite l'API Actions Cache. Flusso guidato con armamento dell'impianto. |
| Enumerazione token | Sonda dei token GitHub contro endpoint API per enumerare 10 ambiti di permesso, identificare il tipo di token ed elencare repo e org accessibili. |
| Pivot cloud | Scambio token OIDC per AWS (sts:AssumeRoleWithWebIdentity), GCP (Workload Identity Federation), Azure (AAD) e Kubernetes. Enumerazione risorse post-pivot. |
| Cloud shell | Sessioni locali durevoli con cloud shell (gcloud/aws/az preconfigurati), cloud export e controlli rapidi del provider. |
| Pivot SSH |
| Livello | Tecnologia |
|---|---|
| Linguaggio | Go 1.26+ |
| Framework TUI | Bubbletea v2 + Lipgloss v2 |
| Layout TUI | Ultraviolet + compositing schermo ANSI-safe |
| Bus messaggi | NATS JetStream |
| Grafo di attacco | hmdsefi/gograph |
| Visualizzazione grafo | Cytoscape.js |
| Database | BBolt |
| Scanner CI/CD | poutine (integrato) |
| Scanner segreti | gitleaks (integrato, regole personalizzate) |
| Estrazione segreti runner | gump (integrato, scansione memoria /proc) |
| SDK cloud | AWS SDK v2, Google Cloud, Azure SDK per Go |
| Proxy inverso | Caddy (TLS automatico) |
make test # Test unitari
make lint # Linter
make e2e-smoke # Percorso rapido di sfruttamento pubblico
make e2e-goat # Catena completa della capra fino alla flag cloud
## Opere precedenti
SmokedMeat si basa sulla ricerca di:
- [poutine](https://github.com/boostsecurityio/poutine) - Scanner SAST per pipeline di build
- [LOTP](https://boostsecurityio.github.io/lotp/) - Tecniche Living Off The Pipeline
- [Gato-X](https://github.com/AdnaneKhan/Gato-X) - Enumerazione GitHub Actions
- [Nord-Stream](https://github.com/synacktiv/nord-stream) - Estrazione segreti CI/CD
- [Sliver](https://github.com/BishopFox/sliver) - Pattern architetturali C2 in Go
- [Mythic](https://docs.mythic-c2.net/) - Design di flussi di lavoro collaborativi
## Licenza
GNU Affero General Public License v3.0 - vedi [LICENSE](https://github.com/boostsecurityio/smokedmeat/blob/main/LICENSE) per i dettagli.
---
*Realizzato per i difensori che vogliono comprendere le tecniche degli attaccanti.*
Sonda dei repo per accesso a chiave SSH di deploy (lettura/scrittura), ssh shell con agente temporaneo, accesso confermato persistente nel grafo. |
| Pivot GitHub | pivot github per scoperta di repo, pivot app per scambio PEM-to-installation-token di GitHub App. Repo scoperti in coda automatica per analisi. |
| Grafo di attacco | Grafo diretto persistente (BBolt) con nodi org/repo/workflow/job/vuln/token/cloud. Visualizzazione live nel browser con Cytoscape.js su /graph. |
| TUI operatore | Flusso di lavoro consapevole della fase, procedura guidata di setup in 7 passi, navigazione ad albero degli attacchi, procedura di sfruttamento, stash di bottino, ricerca omnibox, completamento tab, collegamenti ipertestuali OSC 8. |
| Teamserver | Autenticazione SSH o token, bus messaggi NATS JetStream, proxy API GitHub (i token rimangono lato server), TLS automatico tramite Caddy, cronologia delle operazioni. |