
Ein CI/CD Red Team Framework zur Demonstration von Sicherheitsrisiken in der Build-Pipeline.
CI/CD Red Team Framework
Wie Metasploit, aber für CI/CD-Pipelines.
Von den Machern des poutine Build Pipeline SAST Scanners bei BoostSecurity Labs.

Warnung: Dieses Tool ist nur für autorisierte Sicherheitstests bestimmt.
SmokedMeat existiert, weil CI/CD-Pipeline-Bedrohungen stark unterschätzt werden. Traditionelle Sicherheitsschulungen decken selten Supply-Chain-Angriffe ab, sodass Verteidiger unvorbereitet gegenüber Techniken sind, die Angreifer aktiv in freier Wildbahn ausnutzen.
Wir haben dies entwickelt, um Sicherheitsteams die Möglichkeit zu geben, Abwehrmaßnahmen gegen fortgeschrittene CI/CD-Angriffstechniken durch realistische Red-Team-Übungen zu erlernen, zu üben und zu validieren.
Verwenden Sie es nur gegen Systeme, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben.
SmokedMeat ist ein Post-Exploitation-Framework für CI/CD-Pipelines. Richten Sie es auf eine GitHub-Organisation, lassen Sie es anfällige Workflows finden, setzen Sie einen Implant auf einem kompromittierten Runner ein, navigieren Sie dann durch Cloud-Anbieter, extrahieren Sie Geheimnisse und kartieren Sie den Explosionsradius – alles über eine Terminal-Benutzeroberfläche.
Was es tut:
Philosophie: Kühn und laut. Dies ist kein EDR-Umgehungstool. Es ist ein Demonstrations-Framework, das zeigt, wie tief eine CI/CD-Kompromittierung reicht, bevor etwas einen Alarm auslöst.
Für wen ist es gedacht:
Um SmokedMeat zum ersten Mal auszuprobieren, installieren Sie Docker und make. Go ist nicht erforderlich.
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
make quickstart wird als erster Lauf empfohlen. Es startet den stabilen Quickstart-Stack lokal und startet die Operator-TUI (Counter) gegen den lokalen C2-Teamserver (Kitchen).
Empfohlener erster Lauf:
whoolipublic_repo⚠ Bevorzugen Sie ein klassisches PAT. Fein granulierte PATs können zu restriktiv sein und das Testen öffentlicher Ziele in anderen Organisationen, einschließlich whooli, blockieren.
whooli ist SmokedMeats bewusst anfälliger CI/CD-Angriffs-Spielplatz. Es ist das empfohlene erste Ziel für den öffentlichen Pfad.
Der Setup-Assistent führt Sie durch:
repo.whooli oder Ihre eigene Org./Repo ein.Den vollständigen Challenge-Ablauf finden Sie im whooli-Leitfaden oder gehen Sie direkt zur whooli-GitHub-Org.
Wenn Sie fertig sind:
make quickstart-down # Stop containers
make quickstart-purge # Stop and delete all data
Wenn Sie stattdessen aus dem Quellcode arbeiten möchten, siehe Entwicklung.
Wenn Sie lokal zum Quellbaum beitragen oder daran iterieren, installieren Sie Go 1.26+ und verwenden Sie den Dev-Quickstart:
make dev-quickstart
make dev-quickstart baut das lokale smokedmeat-cloud-shell-Image, startet cloudflared, nats und den C2-Teamserver (Kitchen), und startet dann die Operator-TUI aus dem Quellcode.
Wenn Sie zuerst die Infrastruktur und später die Operator-TUI möchten:
make dev-quickstart-up
make dev-quickstart-counter
Wenn Sie fertig sind:
make dev-quickstart-down # Stop containers
make dev-quickstart-purge # Stop and delete all data
Weitere Bereitstellungsmodi und Details zur lokalen Entwicklung finden Sie in docs/deployment.md.
Counter prüft beim Start auf neuere SmokedMeat-Versionen. Dies kann durch Setzen der Umgebungsvariable SMOKEDMEAT_DISABLE_VERSION_CHECK deaktiviert werden.
Der Hosted Teamserver führt den C2-Teamserver auf einem dedizierten Host und die Operator-TUI nativ auf jeder Operator-Workstation aus.
Auf hoher Ebene kommuniziert die Operator-TUI (Counter) mit dem C2-Teamserver (Kitchen), der Implants (Brisket) auf kompromittierten CI-Runnern verwaltet und den Live-Angriffsgraph bereitstellt.
┌──────────────┐
│ 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 fetches implant binary
│ │ Implant HTTP Beacon/Commands
▼ │
┌────────────────────────────────────────────┴──────────────────────────────────┐
│ GITHUB.COM │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────────────────┐ │
│ │ Malicious PR │ triggers │ GitHub Actions Runner │ │
│ │ (Vulnerable │─────────▶│ │ │
│ │ Workflow) │ │ ┌────────────┐ ┌────────────────┐ │ │
│ └─────────────────────┘ │ │ Stager │─────▶│ THE BRISKET │ │ │
│ │ │ │ │ (Implant) │ │ │
│ │ └────────────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
Vollständige Details in docs/FEATURES.md.
make test # Unit tests
make lint # Linter
make e2e-smoke # Fast public exploit smoke path
make e2e-goat # Full goat chain to the cloud flag
SmokedMeat baut auf Forschung auf von:
GNU Affero General Public License v3.0 – siehe LICENSE für Details.
Gebaut für Verteidiger, die Angreifertechniken verstehen wollen.
| Standardbegriff | SmokedMeat-Name | Beschreibung |
|---|
| Operator TUI | Counter | Terminal-Oberfläche für Analyse, Payload-Bereitstellung und Post-Exploitation-Workflow. |
| C2 teamserver | Kitchen | API- und WebSocket-Server für Operator-Sitzungen, Stager, Callbacks und Graph-Status. |
| Implant | Brisket | Agent, der auf kompromittierten CI-Runnern bereitgestellt wird, für Beaconing, Befehlsausführung und Pivotierung. |
| Browser graph view | Browser View | Live-Angriffsgraph, der vom C2-Teamserver unter /graph bereitgestellt wird. |
| Modus | Verwenden Sie es, wenn | Einstiegspunkt |
|---|
| Quickstart | Schnellster erster Lauf mit der festgelegten Version | make quickstart |
| Dev Quickstart | Am Quellbaum lokal arbeiten | make dev-quickstart |
| Hosted Teamserver | Führen eines echten Einsatzes mit einer stabilen Domain | docs/deployment.md |
| Kategorie | Fähigkeiten |
|---|
| Aufklärung | Automatische Erkennung von 6 CI-Plattformen (GitHub Actions, GitLab CI, Azure DevOps, CircleCI, Jenkins, Bitbucket). Klassifizierung von Geheimnissen, Prüfung der OIDC-Verfügbarkeit, Erfassung von Runner-Metadaten. |
| Geheimnisextraktion | Scannt den Runner.Worker-Prozessspeicher über /proc, um ungemasste secrets.*, vars.* und GITHUB_TOKEN-Berechtigungszuordnungen wiederherzustellen, die GitHub vor den Logs verbirgt. |
| Schwachstellenanalyse | Eingebetteter poutine SAST für Injection-Schwachstellen, gefährliche Trigger und Workflow-if:-Gate-Klassifizierung. Gitleaks-Tiefenscan nach privaten Schlüsseln und PATs in der Git-Historie. |
| Zustellung | 5 automatisierte Methoden: PR, Issue, Kommentar, LOTP, Workflow-Dispatch – plus Copy-Only und manuell. Unterstützung für Entwurfs-PRs, automatisches Schließen bei Callback, server-seitiger Dispatch-Preflight. |
| Injection-Payloads | Kontextbewusste Payload-Generierung für 8 Injection-Vektoren (Branch-Name, PR-Titel/-Text, Commit-Nachricht, Issue-Titel/-Text, github-script, bash run) mit constraint-bewussten Techniken. |
| LOTP | Living Off The Pipeline-Katalog: 15 Build-Tools (npm, pip, cargo, make, docker, gradle, maven und mehr) mit Konfigurationsdatei-Payloads für Codeausführung während Install/Build/Test. |
| Cache-Vergiftung | Writer/Victim-Klassifizierung, exakte Cache-Key-Vorhersage, Archiv-Staging über die Actions Cache API. Assistenten-gesteuerter Ablauf mit Implant-Schärfung. |
| Token-Enumeration | Testen von GitHub-Tokens gegen API-Endpunkte, um 10 Berechtigungsumfänge zu enumerieren, den Token-Typ zu identifizieren und zugängliche Repos und Orgs aufzulisten. |
| Cloud-Pivots | OIDC-Token-Austausch für AWS (sts:AssumeRoleWithWebIdentity), GCP (Workload Identity Federation), Azure (AAD) und Kubernetes. Post-Pivot-Ressourcen-Enumeration. |
| Cloud Shell | Dauerhafte lokale Sitzungen mit cloud shell (vorkonfigurierte gcloud/aws/az), cloud export und Provider-Schnellprüfungen. |
| SSH-Pivoting | Untersuchen von Repos auf SSH-Deploy-Key-Zugriff (lesen/schreiben), ssh shell mit temporärem Agent, bestätigter Zugriff im Graph gespeichert. |
| GitHub-Pivoting | pivot github für die Repo-Erkennung, pivot app für GitHub-App-PEM-zu-Installationstoken-Austausch. Entdeckte Repos werden automatisch für die Analyse in die Warteschlange gestellt. |
| Angriffsgraph | Persistenter gerichteter Graph (BBolt) mit Org/Repo/Workflow/Job/Vuln/Token/Cloud-Knoten. Live-Cytoscape.js-Browser-Visualisierung unter /graph. |
| Operator TUI | Phasenbewusster Workflow, 7-stufiger Setup-Assistent, Angriffsbaumnavigation, Exploit-Assistent, Loot-Versteck, Omnibox-Suche, Tab-Vervollständigung, OSC-8-Hyperlinks. |
| Teamserver | SSH- oder Token-Authentifizierung, NATS JetStream Message Bus, GitHub-API-Proxy (Tokens bleiben server-seitig), automatisches TLS via Caddy, Betriebsverlauf. |
| Schicht | Technologie |
|---|
| Sprache | Go 1.26+ |
| TUI Framework | Bubbletea v2 + Lipgloss v2 |
| TUI Layout | Ultraviolet Layout + ANSI-sichere Bildschirmkomposition |
| Nachrichtenbus | NATS JetStream |
| Angriffsgraph | hmdsefi/gograph |
| Graph-Visualisierung | Cytoscape.js |
| Datenbank | BBolt |
| CI/CD Scanner | poutine (eingebettet) |
| Geheimnis-Scanner | gitleaks (eingebettet, benutzerdefinierte Regeln) |
| Runner-Geheimnisextraktion | gump (eingebettet, /proc-Speicherscan) |
| Cloud SDKs | AWS SDK v2, Google Cloud, Azure SDK für Go |
| Reverse Proxy | Caddy (auto-TLS) |