SMOKEDMEAT(1)

NAME

smokedmeatA CI/CD Red Team Framework for demonstrating Build Pipeline security risks.

SYNOPSIS

INFO

88 stars
8 forks
0 views

DESCRIPTION

A CI/CD Red Team Framework for demonstrating Build Pipeline security risks.

README

SmokedMeat

License: AGPL v3

CI/CD Red Team Framework

Like Metasploit, but for CI/CD pipelines.

From the makers of the poutine Build Pipeline SAST scanner at BoostSecurity Labs.

SmokedMeat quickstart demo


Warning: This tool is for authorized security testing only.

SmokedMeat exists because CI/CD pipeline threats are deeply underestimated. Traditional security training rarely covers supply chain attacks, leaving defenders unprepared for techniques that adversaries actively exploit in the wild.

We built this to give security teams the ability to learn, practice, and validate defenses against advanced CI/CD attack techniques through realistic red team exercises.

Only use against systems you own or have explicit written permission to test.


What is SmokedMeat?

SmokedMeat is a post-exploitation framework for CI/CD pipelines. Point it at a GitHub organization, let it find vulnerable workflows, deploy an implant to a compromised runner, then pivot through cloud providers, extract secrets, and map the blast radius - all from a terminal UI.

What it does:

  1. Analyze - Scan an org's GitHub Actions workflows for injection vulnerabilities, dangerous triggers, and unsafe checkout patterns (powered by poutine)
  2. Exploit - Deploy a stager via PR, issue, comment, or workflow dispatch. When the vulnerable workflow runs, it downloads and executes the implant on the CI runner.
  3. Post-exploit - Extract secrets from runner memory, enumerate GitHub token permissions, scan for private keys, and collect loot
  4. Pivot - Use captured credentials to move laterally: discover private repos, mint GitHub App tokens, exchange OIDC tokens for AWS/GCP/Azure access, probe SSH deploy keys

Philosophy: Bold and noisy. This isn't an EDR evasion tool. It's a demonstration framework that shows how deep a CI/CD compromise goes before anything triggers an alert.

Who is it for:

  • Red teams validating CI/CD security posture in enterprise environments
  • Pentesters demonstrating supply chain attack paths to stakeholders
  • Security engineers testing detection and response for pipeline attacks
  • Researchers developing new CI/CD exploitation techniques
  • Bug bounty hunters exploring supply chain attack surface

Quick Start

To try SmokedMeat for the first time, install Docker and make. Go is not required.

git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart

make quickstart is the recommended first run. It starts the stable release quickstart stack locally and launches the operator TUI (Counter) against the local C2 teamserver (Kitchen).

Recommended first run:

  • Target: whooli
  • Token: classic PAT with public_repo

⚠ Prefer a classic PAT. Fine-grained PATs can be too restrictive and may block testing public targets in other orgs, including whooli.

whooli is SmokedMeat's deliberately vulnerable CI/CD attack playground. It is the recommended first target for the public path.

The setup wizard walks you through:

  1. GitHub PAT - Enter your token. For private repos, a classic PAT will usually need repo.
  2. Target - Enter whooli or your own org/repo
  3. Analysis - Scans workflows for vulnerabilities and presents exploitable findings

For the full challenge flow, see the whooli guide or go straight to the whooli GitHub org.

When you are done:

make quickstart-down       # Stop containers
make quickstart-purge      # Stop and delete all data

If you want to work from source instead, see Development.

Development

If you are contributing or iterating on the source tree locally, install Go 1.26+ and use the dev quickstart:

make dev-quickstart

make dev-quickstart builds the local smokedmeat-cloud-shell image, starts cloudflared, nats, and the C2 teamserver (Kitchen), then launches the operator TUI from source.

If you want the infrastructure first and the operator TUI later:

make dev-quickstart-up
make dev-quickstart-counter

When you are done:

make dev-quickstart-down   # Stop containers
make dev-quickstart-purge  # Stop and delete all data

More deployment modes and local development details are in docs/deployment.md.

Core Components

Standard termSmokedMeat nameDescription
Operator TUICounterTerminal interface for analysis, payload delivery, and post-exploitation workflow.
C2 teamserverKitchenAPI and WebSocket server for operator sessions, stagers, callbacks, and graph state.
ImplantBrisketAgent delivered to compromised CI runners for beaconing, command execution, and pivoting.
Browser graph viewBrowser ViewLive attack graph served by the C2 teamserver at /graph.

Deployment Modes

ModeUse it whenEntry point
QuickstartFastest first run on the pinned releasemake quickstart
Dev QuickstartWorking on the source tree locallymake dev-quickstart
Hosted TeamserverRunning a real engagement with a stable domaindocs/deployment.md

Hosted Teamserver runs the C2 teamserver on a dedicated host and the operator TUI natively on each operator workstation.

Architecture

At a high level, the operator TUI (Counter) talks to the C2 teamserver (Kitchen), which manages implants (Brisket) running on compromised CI runners and serves the live attack graph.

┌──────────────┐
│  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)     │ │ │
│                                   │  └────────────┘      └────────────────┘ │ │
│                                   └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘

Features

Full details in docs/FEATURES.md.

CategoryCapabilities
ReconnaissanceAuto-detect 6 CI platforms (GitHub Actions, GitLab CI, Azure DevOps, CircleCI, Jenkins, Bitbucket). Classify secrets, probe OIDC availability, gather runner metadata.
Secret ExtractionScan Runner.Worker process memory via /proc to recover unmasked secrets.*, vars.*, and GITHUB_TOKEN permission maps that GitHub hides from logs.
Vulnerability AnalysisEmbedded poutine SAST for injection vulnerabilities, dangerous triggers, and workflow if: gate classification. Gitleaks deep scan for private keys and PATs in git history.
Delivery5 automated methods: PR, issue, comment, LOTP, workflow dispatch - plus copy-only and manual. Draft PR support, auto-close on callback, server-side dispatch preflight.
Injection PayloadsContext-aware payload generation for 8 injection vectors (branch name, PR title/body, commit message, issue title/body, github-script, bash run) with constraint-aware techniques.
LOTPLiving Off The Pipeline catalog: 15 build tools (npm, pip, cargo, make, docker, gradle, maven, and more) with config-file payloads for code execution during install/build/test.
Cache PoisoningWriter/victim classification, exact cache key prediction, archive staging via the Actions Cache API. Wizard-driven flow with implant arming.
Token EnumerationProbe GitHub tokens against API endpoints to enumerate 10 permission scopes, identify token type, and list accessible repos and orgs.
Cloud PivotsOIDC token exchange for AWS (sts:AssumeRoleWithWebIdentity), GCP (Workload Identity Federation), Azure (AAD), and Kubernetes. Post-pivot resource enumeration.
Cloud ShellDurable local sessions with cloud shell (pre-configured gcloud/aws/az), cloud export, and provider quick checks.
SSH PivotingProbe repos for SSH deploy key access (read/write), ssh shell with temporary agent, confirmed access persisted to graph.
GitHub Pivotingpivot github for repo discovery, pivot app for GitHub App PEM-to-installation-token exchange. Discovered repos auto-queued for analysis.
Attack GraphPersistent directed graph (BBolt) with org/repo/workflow/job/vuln/token/cloud nodes. Live Cytoscape.js browser visualization at /graph.
Operator TUIPhase-aware workflow, 7-step setup wizard, attack tree navigation, exploit wizard, loot stash, omnibox search, tab completion, OSC 8 hyperlinks.
TeamserverSSH or token auth, NATS JetStream message bus, GitHub API proxy (tokens stay server-side), auto-TLS via Caddy, operation history.

Technology Stack

LayerTechnology
LanguageGo 1.26+
TUI FrameworkBubbletea v2 + Lipgloss v2
TUI LayoutUltraviolet layout + ANSI-safe screen compositing
Message BusNATS JetStream
Attack Graphhmdsefi/gograph
Graph VisualizationCytoscape.js
DatabaseBBolt
CI/CD Scannerpoutine (embedded)
Secret Scannergitleaks (embedded, custom rules)
Runner Secret Extractiongump (embedded, /proc memory scanning)
Cloud SDKsAWS SDK v2, Google Cloud, Azure SDK for Go
Reverse ProxyCaddy (auto-TLS)

Testing

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

Prior Art

SmokedMeat builds on research from:

  • poutine - Build Pipeline SAST scanner
  • LOTP - Living Off The Pipeline techniques
  • Gato-X - GitHub Actions enumeration
  • Nord-Stream - CI/CD secret extraction
  • Sliver - Go C2 architecture patterns
  • Mythic - Collaborative workflow design

License

GNU Affero General Public License v3.0 - see LICENSE for details.


Built for defenders who want to understand attacker techniques.

SEE ALSO

clihub4/17/2026SMOKEDMEAT(1)