
Un marco de Red Team para CI/CD para demostrar riesgos de seguridad en el pipeline de compilación.
Framework de Red Team para CI/CD
Como Metasploit, pero para pipelines de CI/CD.
De los creadores del poutine escáner SAST de Build Pipeline en BoostSecurity Labs.

Advertencia: Esta herramienta es solo para pruebas de seguridad autorizadas.
SmokedMeat existe porque las amenazas a los pipelines de CI/CD están profundamente subestimadas. La capacitación tradicional en seguridad rara vez cubre los ataques a la cadena de suministro, dejando a los defensores desprevenidos frente a técnicas que los adversarios explotan activamente en el mundo real.
Construimos esto para dar a los equipos de seguridad la capacidad de aprender, practicar y validar defensas contra técnicas avanzadas de ataque a CI/CD mediante ejercicios realistas de red team.
Úselo solo contra sistemas de su propiedad o para los que tenga permiso explícito por escrito para realizar pruebas.
SmokedMeat es un framework de post-explotación para pipelines de CI/CD. Apúntalo a una organización de GitHub, deja que encuentre flujos de trabajo vulnerables, despliega un implante en un runner comprometido, luego pivota a través de proveedores de nube, extrae secretos y mapea el radio de explosión, todo desde una interfaz de terminal.
Lo que hace:
Filosofía: Audaz y ruidoso. No es una herramienta de evasión de EDR. Es un framework de demostración que muestra qué tan profundo llega un compromiso de CI/CD antes de que algo active una alerta.
¿Para quién es?
Para probar SmokedMeat por primera vez, instala Docker y make. No se necesita Go.
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
make quickstart es la primera ejecución recomendada. Inicia la pila de inicio rápido de la versión estable localmente y lanza la TUI del operador (Counter) contra el teamserver local C2 (Kitchen).
Primera ejecución recomendada:
whoolipublic_repo⚠ Prefiere un PAT clásico. Los PAT de grano fino pueden ser demasiado restrictivos y pueden bloquear las pruebas de objetivos públicos en otras organizaciones, incluyendo whooli.
whooli es el campo de pruebas de ataque CI/CD deliberadamente vulnerable de SmokedMeat. Es el primer objetivo recomendado para la ruta pública.
El asistente de configuración te guía a través de:
repo.whooli o tu propia org/repoPara el flujo completo del desafío, consulta la whooli guide o ve directamente a la whooli org de GitHub.
Cuando hayas terminado:
make quickstart-down # Detener contenedores
make quickstart-purge # Detener y eliminar todos los datos
Si prefieres trabajar desde el código fuente, consulta Desarrollo.
Si estás contribuyendo o iterando en el árbol fuente localmente, instala Go 1.26+ y usa el inicio rápido de desarrollo:
make dev-quickstart
make dev-quickstart construye la imagen local smokedmeat-cloud-shell, inicia cloudflared, nats y el teamserver C2 (Kitchen), luego lanza la TUI del operador desde el código fuente.
Si quieres la infraestructura primero y la TUI del operador después:
make dev-quickstart-up
make dev-quickstart-counter
Cuando hayas terminado:
make dev-quickstart-down # Detener contenedores
make dev-quickstart-purge # Detener y eliminar todos los datos
Más modos de despliegue y detalles de desarrollo local están en docs/deployment.md.
Counter verifica si hay nuevas versiones de SmokedMeat al iniciar. Se puede deshabilitar configurando la variable de entorno SMOKEDMEAT_DISABLE_VERSION_CHECK.
Hosted Teamserver ejecuta el teamserver C2 en un host dedicado y la TUI del operador de forma nativa en cada estación de trabajo del operador.
A alto nivel, la TUI del operador (Counter) se comunica con el teamserver C2 (Kitchen), que gestiona los implantes (Brisket) que se ejecutan en runners de CI comprometidos y sirve el grafo de ataque en 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) │ │ │
│ │ └────────────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
Detalles completos en docs/FEATURES.md.
make test # Pruebas unitarias
make lint # Linter
make e2e-smoke # Ruta rápida de humo de exploit público
make e2e-goat # Cadena completa de goat hasta la bandera de la nube
SmokedMeat se basa en investigaciones de:
GNU Affero General Public License v3.0 - consulta LICENSE para más detalles.
Construido para defensores que quieren entender las técnicas de los atacantes.
| Término estándar | Nombre SmokedMeat | Descripción |
|---|
| TUI del operador | Counter | Interfaz de terminal para análisis, entrega de payloads y flujo de trabajo de post-explotación. |
| Teamserver C2 | Kitchen | Servidor API y WebSocket para sesiones de operador, stagers, callbacks y estado del grafo. |
| Implante | Brisket | Agente entregado a runners de CI comprometidos para beaconing, ejecución de comandos y pivotación. |
| Vista de grafo en navegador | Browser View | Grafo de ataque en vivo servido por el teamserver C2 en /graph. |
| Modo | Úsalo cuando | Punto de entrada |
|---|
| Quickstart | La primera ejecución más rápida en la versión anclada | make quickstart |
| Dev Quickstart | Trabajando en el árbol fuente localmente | make dev-quickstart |
| Hosted Teamserver | Ejecutando un compromiso real con un dominio estable | docs/deployment.md |
| Categoría | Capacidades |
|---|
| Reconocimiento | Detección automática de 6 plataformas CI (GitHub Actions, GitLab CI, Azure DevOps, CircleCI, Jenkins, Bitbucket). Clasifica secretos, sondea disponibilidad OIDC, recopila metadatos del runner. |
| Extracción de Secretos | Escanea la memoria del proceso Runner.Worker a través de /proc para recuperar mapas de permisos secrets.*, vars.* y GITHUB_TOKEN sin enmascarar que GitHub oculta de los registros. |
| Análisis de Vulnerabilidades | SAST poutine integrado para vulnerabilidades de inyección, disparadores peligrosos y clasificación de puerta if: de flujo de trabajo. Escaneo profundo de Gitleaks para claves privadas y PAT en el historial de git. |
| Entrega | 5 métodos automatizados: PR, issue, comentario, LOTP, envío de flujo de trabajo - más solo copia y manual. Soporte para PR borrador, cierre automático en callback, verificación previa de envío del lado del servidor. |
| Payloads de Inyección | Generación de payloads consciente del contexto para 8 vectores de inyección (nombre de rama, título/cuerpo de PR, mensaje de commit, título/cuerpo de issue, github-script, ejecución bash) con técnicas conscientes de restricciones. |
| LOTP | Catálogo Living Off The Pipeline: 15 herramientas de compilación (npm, pip, cargo, make, docker, gradle, maven y más) con payloads de archivos de configuración para ejecución de código durante instalación/compilación/prueba. |
| Envenenamiento de Caché | Clasificación escritor/víctima, predicción exacta de clave de caché, preparación de archivos a través de la API de caché de Actions. Flujo guiado por asistente con armado de implante. |
| Enumeración de Tokens | Sondea tokens de GitHub contra endpoints de API para enumerar 10 alcances de permisos, identificar el tipo de token y listar repositorios y organizaciones accesibles. |
| Pivotes en la Nube | Intercambio de token OIDC para AWS (sts:AssumeRoleWithWebIdentity), GCP (Workload Identity Federation), Azure (AAD) y Kubernetes. Enumeración de recursos posterior al pivote. |
| Cloud Shell | Sesiones locales duraderas con cloud shell (gcloud/aws/az preconfigurados), cloud export y comprobaciones rápidas del proveedor. |
| Pivote SSH | Sondea repositorios para acceso de clave de despliegue SSH (lectura/escritura), ssh shell con agente temporal, acceso confirmado persistido en el grafo. |
| Pivote GitHub | pivot github para descubrimiento de repos, pivot app para intercambio de PEM de GitHub App a token de instalación. Los repos descubiertos se encolan automáticamente para análisis. |
| Grafo de Ataque | Grafo dirigido persistente (BBolt) con nodos de org/repo/workflow/job/vuln/token/cloud. Visualización en vivo en navegador con Cytoscape.js en /graph. |
| TUI del Operador | Flujo de trabajo consciente de fase, asistente de configuración de 7 pasos, navegación de árbol de ataque, asistente de explotación, almacén de botín, búsqueda omnibox, finalización con tabulador, hipervínculos OSC 8. |
| Teamserver | Autenticación SSH o por token, bus de mensajes NATS JetStream, proxy de API de GitHub (los tokens permanecen en el servidor), TLS automático mediante Caddy, historial de operaciones. |
| Capa | Tecnología |
|---|
| Lenguaje | Go 1.26+ |
| Framework TUI | Bubbletea v2 + Lipgloss v2 |
| Diseño TUI | Ultraviolet + composición de pantalla segura para ANSI |
| Bus de Mensajes | NATS JetStream |
| Grafo de Ataque | hmdsefi/gograph |
| Visualización de Grafos | Cytoscape.js |
| Base de Datos | BBolt |
| Escáner CI/CD | poutine (integrado) |
| Escáner de Secretos | gitleaks (integrado, reglas personalizadas) |
| Extracción de Secretos del Runner | gump (integrado, escaneo de memoria /proc) |
| SDKs de Nube | AWS SDK v2, Google Cloud, Azure SDK for Go |
| Proxy Inverso | Caddy (auto-TLS) |