
Writeup VAPT complet d'OWASP CICD-Goat — 9 flags CTFd capturés, 4 constats critiques + 5 à sévérité élevée (dont CVE-2024-23897) mappés à l'OWASP Top 10 CI/CD Security Risks, avec des PoC, des mesures de remédiation et des résumés prêts pour les entretiens.
<div align="center"> # Rapport VAPT CICD-Goat </div> > Une évaluation complète des vulnérabilités et un test d'intrusion contre [OWASP CICD-Goat](https://github.com/cider-security-research/cicd-goat) — un environnement CI/CD délibérément vulnérable (Jenkins, Gitea, GitLab, CTFd) — cartographié de bout en bout par rapport aux **OWASP Top 10 CI/CD Security Risks**. <div align="center"> [](https://github.com/cider-security-research/cicd-goat) [](./findings) [](./ctfd/challenge-cross-reference.md) [](./LICENSE.md) [](https://linkedin.com/in/dheerajkumarjayaswal) [](https://github.com/dheeraj-jayaswal) </div> --- ## 🧭 Comment cela s'articule avec mes autres dépôts | Dépôt | Ce qu'il contient | |---|---| | **[CICD-Goat-Vapt-Writeup](https://github.com/dheeraj-jayaswal/CICD-Goat-Vapt-Writeup)** *(ce dépôt)* | Rapport VAPT complet contre OWASP CICD-Goat — 16 constats dont CVE-2024-23897, cartographiés par rapport aux OWASP Top 10 CI/CD Security Risks, avec des PoC et des résumés prêts pour l'entretien | | [From-Dev-To-Attacker](https://github.com/dheeraj-jayaswal/From-Dev-To-Attacker) | Mon journal de terrain phare — 67 write-ups originaux sur des schémas de vulnérabilité, rédigés du point de vue d'un développeur, avec une mise en perspective de l'impact sur les domaines métier de l'entreprise (fiscalité, banque, commerce de détail, e-commerce, logistique du fret et éducation) | | [From-Pentester-To-Red-Teamer](https://github.com/dheeraj-jayaswal/From-Pentester-To-Red-Teamer) | Ma feuille de route structurée sur 24 mois pour passer du pentesting Web/API au Red Teaming — phases, labs, certifications et progression suivie ouvertement au fil de mon avancement | | [AppSec-From-The-Trenches](https://github.com/dheeraj-jayaswal/AppSec-From-The-Trenches) | Référence d'outils et de méthodologie de pentest — comment j'utilise réellement Burp Suite, Nmap, Metasploit, Hydra, Hashcat, etc., ainsi que ma méthodologie WAPT | | [API-From-The-Trenches](https://github.com/dheeraj-jayaswal/API-From-The-Trenches) | Série approfondie sur la sécurité des API — couverture de l'OWASP API Top 10, BOLA, attaques JWT, tests GraphQL, méthodologie complète | | [Bug-Bounty-Hunting-Companion](https://github.com/dheeraj-jayaswal/Bug-Bounty-Hunting-Companion) | De vrais rapports de bug bounty divulgués publiquement, découpés en checklists reproductibles | | [DarkWeb-From-The-Trenches](https://github.com/dheeraj-jayaswal/DarkWeb-From-The-Trenches) | Méthodologie de renseignement sur les menaces et d'OSINT sur le dark web — surveillance des fuites d'identifiants, suivi des rançongiciels, TI de pré-engagement | | [.pcap-Arsenal](https://github.com/dheeraj-jayaswal/.pcap-Arsenal) | Captures de paquets organisées par protocole, pour l'analyse et l'apprentissage aux couches Web/API/Réseau | | [Pentest-Engagement-Playbook](https://github.com/dheeraj-jayaswal/Pentest-Engagement-Playbook) | Modèles de cadrage, de ROE, de justification de sévérité et de reporting exécutif de niveau consultant — le playbook opérationnel côté client qui sous-tend une mission | --- ## Pourquoi ce dépôt existe La plupart des write-ups sur la sécurité CI/CD restent soit purement théoriques (une diapositive expliquant la « poisoned pipeline execution »), soit purement centrés sur la chasse aux flags CTF (une ligne « voici le flag, au suivant »). Ce dépôt tente de faire ni l'un ni l'autre : chaque constat ci-dessous est une **vulnérabilité entièrement validée et étayée par une PoC**, rattachée à une catégorie de risque [OWASP CI/CD-SEC](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/02-owasp-top10-cicd-mapping.md) précise, rédigée de la manière dont on voudrait réellement l'expliquer lors d'un entretien ou dans un vrai rapport client — y compris les impasses, les hypothèses erronées et la façon dont elles ont été corrigées. Si vous préparez un entretien sur la sécurité AppSec/DevSecOps/CI-CD, un engagement de pentest impliquant une chaîne d'outils CI/CD, ou si vous souhaitez simplement une visite concrète et pratique de ce à quoi ressemblent réellement « Poisoned Pipeline Execution » ou « Insufficient Credential Hygiene » sur le réseau — ceci est écrit pour vous. ## Environnement cible | Champ | Valeur | |---|---| | Cible | [OWASP CICD-Goat](https://github.com/cider-security-research/cicd-goat) — déploiement local via Docker Compose | | Type d'engagement | Laboratoire d'apprentissage autonome autorisé (grey-box) | | Stack technique | Jenkins 2.332.1, Gitea 1.16.5, GitLab 15.11.13-ee, CTFd, Docker Compose | | Périmètre | `localhost:3000` (Gitea), `:8080`/`:50000` (Jenkins), `:4000` (GitLab), `:8000` (CTFd), `:8008` (prod-sim) | | Méthodologie | Phase 0–3 (Scope → Fingerprinting → Vulnerability ID → Exploitation) | Règles d'engagement complètes : [`docs/00-engagement-overview.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/00-engagement-overview.md). > ⚠️ **Tous les tests de ce dépôt ont été réalisés contre le laboratoire Docker Compose local, jetable et intentionnellement vulnérable du testeur.** Aucun système de production, aucune infrastructure partagée ni aucune donnée tierce n'ont été impliqués. Déployez votre propre copie de CICD-Goat depuis le [dépôt officiel](https://github.com/cider-security-research/cicd-goat) avant d'essayer tout ceci vous-même. ## Résultats en un coup d'œil | ID | Titre | Sévérité | Mapping OWASP CI/CD | Flag CTFd | |---|---|---|---|---| | [F-010](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-010-jenkins-secrets-exposure-console-logs.md) | Exposition de secrets dans les journaux de console de build Jenkins → vol d'identifiants → écriture non autorisée dans le dépôt | **CRITIQUE** | CICD-SEC-6, -4, -2 | flag1, flag2 | | [F-013](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-013-insecure-automerge-bypass.md) | La logique d'auto-merge non sécurisée contourne la revue de code (heuristique de diff mot à mot sur l'ensemble de la PR) | **CRITIQUE** | CICD-SEC-1, -5 | flag10 | | [F-016](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-016-CVE-2024-23897-jenkins-cli-arbitrary-file-read.md) | CVE-2024-23897 — lecture arbitraire de fichiers via la CLI Jenkins sur le contrôleur | **CRITIQUE** | CICD-SEC-7 | flag8 | | [F-017](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-017-gitlab-runner-token-secret-theft.md) | Jeton d'enregistrement de runner partagé GitLab → vol de secrets CI/CD à l'échelle de l'instance | **CRITIQUE** | CICD-SEC-2, -6 | flag11 | | [F-019](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-019-jenkins-controller-rce-agent-label-override.md) | Exécution de code sur le nœud contrôleur Jenkins via le contournement du label d'agent | **CRITIQUE** | CICD-SEC-5, -4 | flag5 | | [F-018](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-018-decoupled-pipeline-branch-exclusion-bypass.md) | Dépôt de pipeline découplé + contournement du filtre d'exclusion de branche | ÉLEVÉE | CICD-SEC-4, -6 | flag3 | | [F-020](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-020-shared-agent-filesystem-credential-leak.md) | Le système de fichiers d'agent partagé expose les identifiants d'un job FreeStyle | ÉLEVÉE | CICD-SEC-6, -5 | flag6 | | [F-021](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-021-checkov-sast-config-override-bypass.md) | Le contournement de la configuration Checkov SAST permet une mauvaise configuration IaC non détectée | ÉLEVÉE | CICD-SEC-1, -8 | flag7 | | [F-014](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-014-flask-secret-key-cicd-variable.md) | Clé secrète de session Flask dérivée d'une variable de pipeline CI/CD | ÉLEVÉE | CICD-SEC-6 | flag11 (via F-017) | Plus **6 constats informatifs / de support** (contrôles positifs, confirmations de frontières RBAC, divulgation d'informations mineure) dans [`findings/informational/`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/informational). ### Comment les constats s'enchaînent Plusieurs constats ne sont pas indépendants — l'un permet ou complète directement un autre. C'est la partie qui tend à impressionner en entretien plus que n'importe quel constat isolé :  **9 des 11 défis CTFd résolus et flags vérifiés** — voir la [référence croisée complète des défis](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/ctfd/challenge-cross-reference.md), y compris un cas honnêtement documenté (Dormouse/flag9) où la frontière de contrôle d'accès a tenu sous attaque soutenue. ## Table des matières complète Chaque fichier ci-dessous est directement lié — l'arborescence des dossiers montre simplement comment ils sont organisés. ### 📋 Documents de mission | Fichier | Contenu | |---|---| | [`docs/00-engagement-overview.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/00-engagement-overview.md) | Règles d'engagement, périmètre, stack technique | | [`docs/01-methodology.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/01-methodology.md) | Méthodologie de test phase par phase utilisée tout au long | | [`docs/02-owasp-top10-cicd-mapping.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/02-owasp-top10-cicd-mapping.md) | Taxonomie de référence complète CICD-SEC-1 à -10 | | [`docs/03-remediation-roadmap.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/03-remediation-roadmap.md) | Liste de remédiation priorisée et actionnable | | [`docs/04-interview-prep.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/04-interview-prep.md) | Résumés oraux de chaque constatation + questions de suivi probables | | [`docs/05-lessons-learned.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/05-lessons-learned.md) | Rétrospective — ce qui a fonctionné, ce qui n'a pas fonctionné, ce qu'il faut faire différemment la prochaine fois | ### 🔍 Reconnaissance | Fichier | Contenu | |---|---| | [`recon/01-fingerprinting.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/recon/01-fingerprinting.md) | Phase 1 — empreinte non authentifiée de chaque service du périmètre | | [`recon/02-authenticated-enumeration.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/recon/02-authenticated-enumeration.md) | Phase 2 — énumération authentifiée une fois l'accès initial obtenu | ### 🚨 Constatations critiques et élevées | Fichier | |---| | [F-010 — Exposition de secrets Jenkins via les journaux de console](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-010-jenkins-secrets-exposure-console-logs.md) | | [F-013 — Contournement de l'auto-merge non sécurisé](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-013-insecure-automerge-bypass.md) | | [F-014 — Clé secrète Flask issue d'une variable CI/CD](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-014-flask-secret-key-cicd-variable.md) | | [F-016 — CVE-2024-23897 Lecture arbitraire de fichiers via Jenkins CLI](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-016-CVE-2024-23897-jenkins-cli-arbitrary-file-read.md) | | [F-017 — Vol de secret de token de runner GitLab](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-017-gitlab-runner-token-secret-theft.md) | | [F-018 — Contournement de l'exclusion de branche de pipeline découplé](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-018-decoupled-pipeline-branch-exclusion-bypass.md) | | [F-019 — RCE du contrôleur Jenkins via le remplacement de label d'agent](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-019-jenkins-controller-rce-agent-label-override.md) | | [F-020 — Fuite d'identifiants via le système de fichiers d'agent partagé](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-020-shared-agent-filesystem-credential-leak.md) | | [F-021 — Contournement du remplacement de configuration SAST Checkov](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/F-021-checkov-sast-config-override-bypass.md) | ### ℹ️ Constatations informatives / complémentaires | Fichier | |---| | [F-006 — Lacune d'énumération des dépôts privés](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/informational/F-006-private-repo-enumeration-gap.md) | | [F-007 — Utilisateur Jenkins supplémentaire](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/informational/F-007-additional-jenkins-user.md) | | [F-009 — Job Read vs ExtendedRead](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/informational/F-009-job-read-vs-extendedread.md) | | [F-011 — Utilisation correcte de withCredentials (contrôle positif)](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/informational/F-011-correct-withcredentials-usage.md) | | [F-012 — Coupure de connexion à l'API des identifiants](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/informational/F-012-credentials-api-connection-drop.md) | | [F-015 — Énumération anonyme du registre](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/findings/informational/F-015-anonymous-registry-enumeration.md) | ### 🎯 CTFd | Fichier | Contenu | |---|---| | [`ctfd/challenge-cross-reference.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/ctfd/challenge-cross-reference.md) | Référence croisée complète flag par flag, incluant l'investigation bloquée Dormouse/flag9 et la correction Duchess/flag4 | ## Structure du dépôt ``` . ├── docs/ # Engagement context, methodology, mappings, remediation, interview prep │ ├── 00-engagement-overview.md │ ├── 01-methodology.md │ ├── 02-owasp-top10-cicd-mapping.md │ ├── 03-remediation-roadmap.md │ ├── 04-interview-prep.md │ └── 05-lessons-learned.md ├── recon/ # Phase 1 & 2 — fingerprinting and authenticated enumeration │ ├── 01-fingerprinting.md │ └── 02-authenticated-enumeration.md ├── findings/ # One file per confirmed finding, full PoC + remediation │ ├── F-010-...md ... F-021-...md │ └── informational/ # INFO/LOW severity supporting observations ├── ctfd/ │ └── challenge-cross-reference.md └── LICENSE.md ``` ## Parcours de lecture - **Vous voulez juste les points clés ?** Commencez par le [tableau des résultats ci-dessus](#results-at-a-glance), puis lisez F-010, F-013, F-016 et F-017 — les quatre chaînes d'attaque de bout en bout les plus complètes. - **Vous préparez un entretien ?** Allez directement à [`docs/04-interview-prep.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/04-interview-prep.md) — des résumés oraux d'un paragraphe pour chaque constat majeur, ainsi que les questions de suivi courantes. - **Vous construisez/renforcez un pipeline CI/CD ?** Allez directement à [`docs/03-remediation-roadmap.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/03-remediation-roadmap.md) — une liste de contrôle hiérarchisée et exploitable. - **Vous découvrez les concepts de sécurité CI/CD ?** Commencez par [`docs/02-owasp-top10-cicd-mapping.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/02-owasp-top10-cicd-mapping.md) pour la taxonomie de référence autour de laquelle tout ce dépôt est organisé. ## À propos des OWASP Top 10 CI/CD Security Risks Chaque constat présenté ici est mis en correspondance avec les [OWASP Top 10 CI/CD Security Risks (2023)](https://owasp.org/www-project-top-10-ci-cd-security-risks/) — un tableau de référence complet (CICD-SEC-1 à CICD-SEC-10) se trouve dans [`docs/02-owasp-top10-cicd-mapping.md`](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/docs/02-owasp-top10-cicd-mapping.md), car il est constamment référencé tout au long des différents constats. ## Avertissement Ce dépôt documente des tests réalisés **exclusivement contre un laboratoire d'entraînement local, auto-hébergé et intentionnellement vulnérable** ([OWASP CICD-Goat](https://github.com/cider-security-research/cicd-goat)), à des fins éducatives et de portfolio. Rien ici ne cible, ne référence ou n'a été testé contre un système de production, un service tiers ou un identifiant réel. N'utilisez aucune technique de ce dépôt contre des systèmes que vous ne possédez pas ou pour lesquels vous ne disposez pas d'une autorisation écrite explicite de test. --- ## 🧠 Philosophie de test > *« Les meilleurs testeurs d'intrusion pensent d'abord comme des développeurs, ensuite comme des attaquants. Si vous comprenez pourquoi le code a été écrit d'une certaine manière, vous trouverez toujours plus qu'un scanner ne le fera jamais. »* J'aborde chaque mission en trois phases : **1. Comprendre avant d'attaquer** — Lisez l'application. Utilisez-la comme un utilisateur réel. Comprenez la logique métier avant de toucher au moindre outil. **2. Le manuel d'abord, les outils ensuite** — Les scanners automatisés trouvent ce pour quoi ils sont configurés. Les bugs intéressants sont toujours trouvés en réfléchissant, pas en scannant. **3. Rédiger comme un développeur** — Un constat que les développeurs ne peuvent ni comprendre ni reproduire est un constat qui ne sera pas corrigé. --- ## 👤 À propos de moi - 👤 **Nom** — Dheeraj Kumar Jayaswal - 🌍 **Localisation** — Dublin, comté de Dublin, Irlande - 💼 **Rôle** — Consultant principal en tests d'intrusion | VikingCloud (précédemment Technology Lead – Offensive Security, Infosys Limited) - 🎯 **Domaine principal** — Sécurité des applications web et des API — Conseil en sécurité offensive - 🏆 **Expérience** — 16+ ans dans l'IT | 9+ ans en sécurité offensive - 🔎 **Atout** — A commencé comme développeur full-stack (ASP.NET / SQL Server) — je pense comme un développeur et j'attaque comme un hacker - 🎓 **En cours** — OSWE — OffSec Web Expert (parcours OSCE3) - 🏢 **Secteurs** — Impôt sur le revenu · Banque · Commerce de détail · E-commerce · Logistique de fret · Éducation - 📝 **Partage** — Notes de terrain sur les pentests en entreprise, méthodologie et comptes rendus pratiques issus de missions réelles --- ## 🏅 Certifications | Certification | Organisme émetteur | Statut | |---|---|---| | Certified Ethical Hacker (CEH) | EC-Council | ✅ 2021 | | AWS Certified Solutions Architect – Associate | Amazon Web Services | ✅ 2022 | | AWS Certified Cloud Practitioner | Amazon Web Services | ✅ 2022 | | Executive Certificate in Cyber Security | IIT Kanpur | ✅ 2026 | | OSWE — OffSec Web Expert (parcours OSCE3) | OffSec | 🔄 En cours | **Orientation future — Red Teaming :** OSCP → CRTO → OSEP, CRTP, CRTL, CRTE --- ## 📄 Licence Ce contenu est sous licence **[CC BY 4.0](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/LICENSE.md)**. Vous êtes libre de réutiliser ou d'adapter tout ou partie de cette rédaction — il suffit d'attribuer clairement le contenu à **Dheeraj Kumar Jayaswal** avec un lien vers ce dépôt. CICD-Goat est un projet distinct de [Cider Security](https://github.com/cider-security-research/cicd-goat) — allez mettre une étoile à l'original. --- ## 🤝 Connect [LinkedIn](https://linkedin.com/in/dheerajkumarjayaswal) — ouvert au conseil, à la collaboration et aux discussions sur la sécurité. Les retours, corrections et PR (par exemple pour flag9/Dormouse, ou le suivi Duchess/flag4 dans la [référence croisée CTFd](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/ctfd/challenge-cross-reference.md)) sont les bienvenus — voir [CONTRIBUTING.md](https://github.com/dheeraj-jayaswal/cicd-goat-vapt-writeup/blob/main/CONTRIBUTING.md).