Un framework Red Team CI/CD pour démontrer les risques de sécurité des pipelines de build.
Framework Red Team pour CI/CD
Comme Metasploit, mais pour les pipelines CI/CD.
Des créateurs du scanner SAST de pipeline de build poutine chez BoostSecurity Labs.

Avertissement : Cet outil est réservé aux tests de sécurité autorisés.
SmokedMeat existe parce que les menaces sur les pipelines CI/CD sont largement sous-estimées. La formation traditionnelle en sécurité couvre rarement les attaques sur la chaîne d'approvisionnement, laissant les défenseurs mal préparés face à des techniques que les attaquants exploitent activement dans la nature.
Nous l'avons construit pour donner aux équipes de sécurité la capacité d'apprendre, de pratiquer et de valider les défenses contre les techniques d'attaque CI/CD avancées via des exercices réalistes d'équipe rouge.
Utilisez-le uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite.
SmokedMeat est un framework de post-exploitation pour les pipelines CI/CD. Pointez-le vers une organisation GitHub, laissez-le trouver des workflows vulnérables, déployez un implant sur un runner compromis, puis pivotez à travers les fournisseurs cloud, extrayez des secrets et cartographiez le rayon d'explosion – le tout depuis une interface utilisateur en terminal.
Ce qu'il fait :
Philosophie : Audacieux et bruyant. Ce n'est pas un outil d'évasion EDR. C'est un framework de démonstration qui montre jusqu'où une compromission CI/CD peut aller avant que quoi que ce soit ne déclenche une alerte.
À qui s'adresse-t-il :
Pour essayer SmokedMeat pour la première fois, installez Docker et make. Go n'est pas nécessaire.
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
make quickstart est la première exécution recommandée. Elle démarre la stack quickstart de la version stable localement et lance l'interface TUI de l'opérateur (Counter) contre le serveur d'équipe C2 (Kitchen).
Première exécution recommandée :
whoolipublic_repo⚠ Préférez un PAT classique. Les PAT à granularité fine peuvent être trop restrictifs et pourraient bloquer les tests de cibles publiques dans d'autres organisations, y compris whooli.
whooli est le terrain d'entraînement d'attaque CI/CD délibérément vulnérable de SmokedMeat. C'est la cible recommandée pour le chemin public.
L'assistant de configuration vous guide à travers :
repo.whooli ou votre propre organisation/dépôtPour le parcours complet du défi, voir le guide whooli ou allez directement à l'organisation GitHub whooli.
Lorsque vous avez terminé :
make quickstart-down # Arrêter les conteneurs
make quickstart-purge # Arrêter et supprimer toutes les données
Si vous préférez travailler à partir des sources, voir Développement.
Si vous contribuez ou itérez localement sur l'arborescence source, installez Go 1.26+ et utilisez le démarrage rapide de développement :
make dev-quickstart
make dev-quickstart construit l'image locale smokedmeat-cloud-shell, démarre cloudflared, nats et le serveur d'équipe C2 (Kitchen), puis lance l'interface TUI de l'opérateur depuis les sources.
Si vous voulez d'abord l'infrastructure et l'interface TUI plus tard :
make dev-quickstart-up
make dev-quickstart-counter
Lorsque vous avez terminé :
make dev-quickstart-down # Arrêter les conteneurs
make dev-quickstart-purge # Arrêter et supprimer toutes les données
Plus de modes de déploiement et de détails de développement local dans docs/deployment.md.
Counter vérifie la disponibilité de nouvelles versions de SmokedMeat au démarrage. Cela peut être désactivé en définissant la variable d'environnement SMOKEDMEAT_DISABLE_VERSION_CHECK.
| Terme standard | Nom SmokedMeat | Description |
|---|---|---|
| Interface TUI de l'opérateur | Counter | Interface terminal pour l'analyse, la livraison de payload et le workflow de post-exploitation. |
| Serveur d'équipe C2 | Kitchen | Serveur API et WebSocket pour les sessions opérateur, les stagers, les callbacks et l'état du graphe. |
| Implant | Brisket | Agent livré aux runners CI compromis pour le beaconing, l'exécution de commandes et le pivotement. |
| Vue graphique navigateur | Browser View | Graphe d'attaque en direct servi par le serveur d'équipe C2 à /graph. |
| Mode | Quand l'utiliser | Point d'entrée |
|---|---|---|
| Quickstart | Première exécution la plus rapide sur la version épinglée | make quickstart |
| Dev Quickstart | Travail local sur l'arborescence source | make dev-quickstart |
| Teamserver Hébergé | Engagement réel avec un nom de domaine stable | docs/deployment.md |
Le mode Teamserver Hébergé exécute le serveur d'équipe C2 sur un hôte dédié et l'interface TUI de l'opérateur en natif sur chaque poste de travail opérateur.
À haut niveau, l'interface TUI de l'opérateur (Counter) communique avec le serveur d'équipe C2 (Kitchen), qui gère les implants (Brisket) s'exécutant sur les runners CI compromis et sert le graphe d'attaque en direct.
┌──────────────┐
│ 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 récupère le binaire de l'implant
│ │ Implant HTTP Beacon/Commandes
▼ │
┌────────────────────────────────────────────┴──────────────────────────────────┐
│ GITHUB.COM │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────────────────┐ │
│ │ Malicious PR │ triggers │ GitHub Actions Runner │ │
│ │ (Vulnerable │─────────▶│ │ │
│ │ Workflow) │ │ ┌────────────┐ ┌────────────────┐ │ │
│ └─────────────────────┘ │ │ Stager │─────▶│ THE BRISKET │ │ │
│ │ │ │ │ (Implant) │ │ │
│ │ └────────────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
Détails complets dans docs/FEATURES.md.
| Catégorie | Capacités |
|---|---|
| Reconnaissance | Détection automatique de 6 plateformes CI (GitHub Actions, GitLab CI, Azure DevOps, CircleCI, Jenkins, Bitbucket). Classification des secrets, sondage de la disponibilité OIDC, collecte des métadonnées du runner. |
| Extraction de secrets | Scan de la mémoire du processus Runner.Worker via /proc pour récupérer les secrets.*, vars.* non masqués et les cartes de permissions GITHUB_TOKEN que GitHub cache dans les logs. |
| Analyse de vulnérabilités | SAST poutine embarqué pour les vulnérabilités d'injection, les déclencheurs dangereux et la classification des portes if: des workflows. Scan approfondi Gitleaks pour les clés privées et PAT dans l'historique git. |
| Livraison | 5 méthodes automatisées : PR, issue, commentaire, LOTP, workflow dispatch – plus copie seule et manuelle. Support des PR brouillons, fermeture automatique sur callback, pré-vérification du dispatch côté serveur. |
| Payloads d'injection | Génération de payloads contextuels pour 8 vecteurs d'injection (nom de branche, titre/corps de PR, message de commit, titre/corps d'issue, github-script, bash run) avec des techniques tenant compte des contraintes. |
| LOTP | Catalogue Living Off The Pipeline : 15 outils de build (npm, pip, cargo, make, docker, gradle, maven, et plus) avec des payloads de fichier de configuration pour l'exécution de code lors de l'installation/construction/test. |
| Empoisonnement de cache | Classification écrivain/victime, prédiction exacte de clé de cache, préparation d'archive via l'API Actions Cache. Flux guidé par assistant avec armement de l'implant. |
| Énumération de tokens | Sondage des tokens GitHub contre les endpoints API pour énumérer 10 périmètres de permission, identifier le type de token et lister les dépôts et organisations accessibles. |
| Pivotements cloud | Échange de tokens OIDC pour AWS (sts:AssumeRoleWithWebIdentity), GCP (Workload Identity Federation), Azure (AAD) et Kubernetes. Énumération des ressources post-pivot. |
| Cloud Shell | Sessions locales durables avec cloud shell (gcloud/aws/az préconfigurés), et vérifications rapides des fournisseurs. |
| Couche | Technologie |
|---|---|
| Langage | Go 1.26+ |
| Framework TUI | Bubbletea v2 + Lipgloss v2 |
| Disposition TUI | Ultraviolet layout + composition d'écran compatible ANSI |
| Bus de messages | NATS JetStream |
| Graphe d'attaque | hmdsefi/gograph |
| Visualisation de graphe | Cytoscape.js |
| Base de données | BBolt |
| Scanner CI/CD | poutine (embarqué) |
| Scanner de secrets | gitleaks (embarqué, règles personnalisées) |
| Extraction de secrets du runner | gump (embarqué, scan mémoire /proc) |
| SDK Cloud | AWS SDK v2, Google Cloud, Azure SDK pour Go |
| Proxy inverse | Caddy (TLS automatique) |
make test # Tests unitaires
make lint # Linter
make e2e-smoke # Chemin de fumée d'exploitation public rapide
make e2e-goat # Chaîne complète de la chèvre jusqu'au drapeau cloud
## Travaux antérieurs
SmokedMeat s'appuie sur les travaux de recherche suivants :
- [poutine](https://github.com/boostsecurityio/poutine) – Scanner SAST de pipeline de build
- [LOTP](https://boostsecurityio.github.io/lotp/) – Techniques Living Off The Pipeline
- [Gato-X](https://github.com/AdnaneKhan/Gato-X) – Énumération GitHub Actions
- [Nord-Stream](https://github.com/synacktiv/nord-stream) – Extraction de secrets CI/CD
- [Sliver](https://github.com/BishopFox/sliver) – Motifs d'architecture Go C2
- [Mythic](https://docs.mythic-c2.net/) – Conception de workflow collaboratif
## Licence
GNU Affero General Public License v3.0 – voir [LICENSE](https://github.com/boostsecurityio/smokedmeat/blob/main/LICENSE) pour les détails.
---
*Conçu pour les défenseurs qui veulent comprendre les techniques des attaquants.*
cloud export| Pivotement SSH | Sondage des dépôts pour l'accès par clé de déploiement SSH (lecture/écriture), ssh shell avec agent temporaire, accès confirmé persistant dans le graphe. |
| Pivotement GitHub | pivot github pour la découverte de dépôts, pivot app pour l'échange PEM d'application GitHub en token d'installation. Les dépôts découverts sont automatiquement mis en file d'attente pour analyse. |
| Graphe d'attaque | Graphe orienté persistant (BBolt) avec nœuds org/repo/workflow/job/vuln/token/cloud. Visualisation en direct dans le navigateur avec Cytoscape.js à /graph. |
| Interface TUI de l'opérateur | Workflow conscient des phases, assistant de configuration en 7 étapes, navigation dans l'arbre d'attaque, assistant d'exploitation, stash de butin, recherche omnibox, complétion par tabulation, hyperliens OSC 8. |
| Serveur d'équipe | Authentification SSH ou par token, bus de messages NATS JetStream, proxy API GitHub (les tokens restent côté serveur), TLS automatique via Caddy, historique des opérations. |