
Um Framework Red Team de CI/CD para demonstrar riscos de segurança em pipelines de build.
Framework de Red Team para CI/CD
Como o Metasploit, mas para pipelines CI/CD.
Feito pelos criadores do poutine, scanner SAST de pipeline de build, no BoostSecurity Labs.

Aviso: Esta ferramenta é apenas para testes de segurança autorizados.
O SmokedMeat existe porque as ameaças a pipelines CI/CD são profundamente subestimadas. O treinamento tradicional de segurança raramente cobre ataques à cadeia de suprimentos, deixando os defensores despreparados para técnicas que adversários exploram ativamente no mundo real.
Construímos isto para dar às equipes de segurança a capacidade de aprender, praticar e validar defesas contra técnicas avançadas de ataque CI/CD por meio de exercícios realistas de red team.
Use apenas contra sistemas que você possui ou para os quais tem permissão explícita por escrito para testar.
SmokedMeat é um framework de pós-exploração para pipelines CI/CD. Aponte para uma organização do GitHub, deixe-o encontrar workflows vulneráveis, implante um implant em um runner comprometido, então mova-se lateralmente por provedores de nuvem, extraia segredos e mapeie o raio de destruição — tudo a partir de uma interface de terminal.
O que ele faz:
Filosofia: Ousado e barulhento. Esta não é uma ferramenta de evasão de EDR. É um framework de demonstração que mostra quão profundo um comprometimento de CI/CD vai antes de qualquer coisa disparar um alerta.
Para quem é:
Para experimentar o SmokedMeat pela primeira vez, instale Docker e make. Go não é necessário.
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
make quickstart é a primeira execução recomendada. Ela inicia a stack de quickstart da versão estável localmente e lança a TUI do operador (Counter) contra o teamserver C2 local (Kitchen).
Primeira execução recomendada:
whoolipublic_repo⚠ Prefira um PAT clássico. PATs de granularidade fina podem ser muito restritivos e podem bloquear o teste de alvos públicos em outras organizações, incluindo whooli.
whooli é o playground de ataque CI/CD deliberadamente vulnerável do SmokedMeat. É o primeiro alvo recomendado para o caminho público.
O assistente de configuração guia você por:
repo.whooli ou sua própria org/repositórioPara o fluxo completo de desafio, veja o guia whooli ou vá direto para a org GitHub whooli.
Quando terminar:
make quickstart-down # Parar contêineres
make quickstart-purge # Parar e deletar todos os dados
Se preferir trabalhar a partir do código-fonte, veja Desenvolvimento.
Se você está contribuindo ou iterando na árvore de código-fonte localmente, instale Go 1.26+ e use o quickstart de desenvolvimento:
make dev-quickstart
make dev-quickstart constrói a imagem local smokedmeat-cloud-shell, inicia cloudflared, nats, e o teamserver C2 (Kitchen), então lança a TUI do operador a partir do código-fonte.
Se você quiser a infraestrutura primeiro e a TUI do operador depois:
make dev-quickstart-up
make dev-quickstart-counter
Quando terminar:
make dev-quickstart-down # Parar contêineres
make dev-quickstart-purge # Parar e deletar todos os dados
Mais modos de implantação e detalhes de desenvolvimento local estão em docs/deployment.md.
O Counter verifica se há novas versões do SmokedMeat na inicialização. Pode ser desabilitado definindo a variável de ambiente SMOKEDMEAT_DISABLE_VERSION_CHECK.
O Teamserver Hospedado roda o teamserver C2 em um host dedicado e a TUI do operador nativamente em cada estação de trabalho do operador.
Em alto nível, a TUI do operador (Counter) conversa com o teamserver C2 (Kitchen), que gerencia implants (Brisket) rodando em runners de CI comprometidos e serve o grafo de ataque ao vivo.
┌──────────────┐
│ 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) │ │ │
│ │ └────────────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
Detalhes completos em docs/FEATURES.md.
make test # Testes unitários
make lint # Linter
make e2e-smoke # Caminho rápido de exploit público de fumaça
make e2e-goat # Cadeia completa de goat até a flag da nuvem
SmokedMeat é construído sobre pesquisas de:
GNU Affero General Public License v3.0 – veja LICENSE para detalhes.
Construído para defensores que querem entender as técnicas dos atacantes.
| Termo padrão | Nome no SmokedMeat | Descrição |
|---|
| TUI do Operador | Counter | Interface de terminal para análise, entrega de payload e fluxo de trabalho de pós-exploração. |
| Teamserver C2 | Kitchen | Servidor API e WebSocket para sessões do operador, stagers, callbacks e estado do grafo. |
| Implant | Brisket | Agente entregue a runners de CI comprometidos para beaconing, execução de comandos e movimentação lateral. |
| Visualização de grafo no navegador | Browser View | Grafo de ataque ao vivo servido pelo teamserver C2 em /graph. |
| Modo | Use quando | Ponto de entrada |
|---|
| Quickstart | Primeira execução mais rápida na versão fixada | make quickstart |
| Dev Quickstart | Trabalhando na árvore de código-fonte localmente | make dev-quickstart |
| Teamserver Hospedado | Executando um engajamento real com um domínio estável | docs/deployment.md |
| Categoria | Capacidades |
|---|
| Reconhecimento | Detecta automaticamente 6 plataformas CI (GitHub Actions, GitLab CI, Azure DevOps, CircleCI, Jenkins, Bitbucket). Classifica segredos, testa disponibilidade de OIDC, coleta metadados do runner. |
| Extração de Segredos | Escaneia a memória do processo Runner.Worker via /proc para recuperar secrets.*, vars.* e mapas de permissão GITHUB_TOKEN que o GitHub oculta dos logs. |
| Análise de Vulnerabilidades | SAST poutine embutido para vulnerabilidades de injeção, triggers perigosos e classificação de gate if: de workflow. Varredura profunda com Gitleaks para chaves privadas e PATs no histórico do git. |
| Entrega | 5 métodos automatizados: PR, issue, comentário, LOTP e workflow dispatch – além de apenas cópia e manual. Suporte a Draft PR, fechamento automático ao callback, pré-verificação de dispatch no servidor. |
| Payloads de Injeção | Geração de payload consciente de contexto para 8 vetores de injeção (nome de branch, título/corpo de PR, mensagem de commit, título/corpo de issue, github-script, bash run) com técnicas conscientes de restrições. |
| LOTP | Catálogo Living Off The Pipeline: 15 ferramentas de build (npm, pip, cargo, make, docker, gradle, maven e mais) com payloads de arquivos de configuração para execução de código durante instalação/build/teste. |
| Envenenamento de Cache | Classificação escritor/vítima, predição exata de chave de cache, preparação de arquivos via API Actions Cache. Fluxo guiado por assistente com armar implant. |
| Enumeração de Tokens | Testa tokens do GitHub contra endpoints da API para enumerar 10 escopos de permissão, identificar tipo de token e listar repositórios e organizações acessíveis. |
| Movimentação Lateral para Nuvem | Troca de token OIDC para AWS (sts:AssumeRoleWithWebIdentity), GCP (Workload Identity Federation), Azure (AAD) e Kubernetes. Enumeração de recursos pós-movimentação. |
| Cloud Shell | Sessões locais duráveis com cloud shell (gcloud/aws/az pré-configurados), cloud export e verificações rápidas de provedor. |
| Movimentação Lateral via SSH | Testa repositórios para acesso de chave SSH de deploy (leitura/escrita), ssh shell com agente temporário, acesso confirmado persistido no grafo. |
| Movimentação Lateral no GitHub | pivot github para descoberta de repositórios, pivot app para troca de PEM de GitHub App por token de instalação. Repositórios descobertos são automaticamente enfileirados para análise. |
| Grafo de Ataque | Grafo direcionado persistente (BBolt) com nós de org/repo/workflow/job/vuln/token/cloud. Visualização ao vivo no navegador com Cytoscape.js em /graph. |
| TUI do Operador | Fluxo de trabalho consciente de fase, assistente de configuração de 7 etapas, navegação em árvore de ataque, assistente de exploit, armazenamento de loot, pesquisa omnibox, completação por tab, hyperlinks OSC 8. |
| Teamserver | Autenticação SSH ou token, barramento de mensagens NATS JetStream, proxy da API do GitHub (tokens permanecem no lado do servidor), TLS automático via Caddy, histórico de operações. |
| Camada | Tecnologia |
|---|
| Linguagem | Go 1.26+ |
| Framework TUI | Bubbletea v2 + Lipgloss v2 |
| Layout TUI | Ultraviolet layout + composição de tela segura para ANSI |
| Barramento de Mensagens | NATS JetStream |
| Grafo de Ataque | hmdsefi/gograph |
| Visualização de Grafo | Cytoscape.js |
| Banco de Dados | BBolt |
| Scanner CI/CD | poutine (embutido) |
| Scanner de Segredos | gitleaks (embutido, regras personalizadas) |
| Extração de Segredos de Runner | gump (embutido, varredura de memória /proc) |
| SDKs de Nuvem | AWS SDK v2, Google Cloud, Azure SDK para Go |
| Proxy Reverso | Caddy (TLS automático) |