
CICD-Goat-Vapt-Writeup — 已更新!
OWASP CICD-Goat 的完整 VAPT 报告 — 捕获 9 个 CTFd flag,4 个严重 + 5 个高危发现(含 CVE-2024-23897),映射至 OWASP Top 10 CI/CD 安全风险,附 PoC、修复建议及面试速览摘要。
CICD-Goat VAPT 渗透测试报告
针对 OWASP CICD-Goat 的完整漏洞评估与渗透测试——一个故意设计为存在漏洞的 CI/CD 环境(Jenkins、Gitea、GitLab、CTFd)——端到端映射至 OWASP Top 10 CI/CD 安全风险。
🧭 本仓库与我其他仓库的关系
| 仓库 | 内容简介 |
|---|---|
| CICD-Goat-Vapt-Writeup (本仓库) | 针对 OWASP CICD-Goat 的完整 VAPT 报告——包含 16 项发现(含 CVE-2024-23897),映射至 OWASP Top 10 CI/CD 安全风险,附 PoC 与面试级摘要 |
| From-Dev-To-Attacker | 我的旗舰实战日志——67 篇原创漏洞模式分析,以开发者视角撰写,涵盖所得税、银行、零售、电商、货运物流与教育等行业领域影响框架 |
| From-Pentester-To-Red-Teamer | 我从 Web/API 渗透测试转型红队的分阶段 24 个月路线图——阶段、实验环境、认证,以及公开记录的进展 |
| AppSec-From-The-Trenches | 渗透测试工具与方法论参考——我实际如何使用 Burp Suite、Nmap、Metasploit、Hydra、Hashcat 等,以及我的 WAPT 方法论 |
| API-From-The-Trenches | API 安全深度系列——OWASP API Top 10 覆盖、BOLA、JWT 攻击、GraphQL 测试、完整方法论 |
| Bug-Bounty-Hunting-Companion | 真实公开披露的漏洞赏金报告,拆解为可复现的检查清单 |
| DarkWeb-From-The-Trenches | 威胁情报与暗网 OSINT 方法论——凭据泄露监控、勒索软件追踪、前期威胁情报 |
| .pcap-Arsenal | 按协议整理的抓包文件,用于 Web/API/网络层分析与学习 |
| Pentest-Engagement-Playbook | 顾问级范围界定、ROE、严重性判定依据与高管报告模板——项目背后的客户交付操作手册 |
为什么写这个
大多数 CI/CD 安全报告要么纯理论(一张幻灯片解释"管道投毒执行"),要么纯追 CTF flag(一句"这是 flag,下一个")。本仓库两者皆非:以下每一项发现都是经过完整验证、有 PoC 支撑的漏洞,映射至具体的 OWASP CI/CD-SEC 风险类别,以你在面试或真实客户报告中实际想要表达的方式撰写——包括死胡同、错误假设,以及它们是如何被纠正的。
如果你正在准备 AppSec/DevSecOps/CI-CD 安全面试,正在为涉及 CI/CD 工具链的渗透测试项目做准备,或者只是想亲手、具体地了解“Poisoned Pipeline Execution”或“Insufficient Credential Hygiene”在实际流量中究竟是什么样子——这份材料就是为你写的。
目标环境
| 字段 | 值 |
|---|---|
| 目标 | OWASP CICD-Goat — 本地 Docker Compose 部署 |
| 项目类型 | 经授权的自主学习实验环境(灰盒) |
| 技术栈 | Jenkins 2.332.1、Gitea 1.16.5、GitLab 15.11.13-ee、CTFd、Docker Compose |
| 范围 | localhost:3000(Gitea)、:8080/:50000(Jenkins)、:4000(GitLab)、:8000(CTFd)、:8008(prod-sim) |
| 方法论 | 阶段 0–3(范围界定 → 指纹识别 → 漏洞识别 → 利用) |
完整交战规则:docs/00-engagement-overview.md。
⚠️ 本仓库中的所有测试均针对测试者自己的本地、一次性、故意存在漏洞的 Docker Compose 实验环境执行。 未涉及任何生产系统、共享基础设施或第三方数据。在自行尝试任何内容之前,请先从官方仓库启动你自己的 CICD-Goat 副本。
结果一览
| ID | 标题 | 严重性 | OWASP CI/CD 映射 | CTFd Flag |
|---|---|---|---|---|
| F-010 | Jenkins 构建控制台日志中的机密泄露 → 凭据窃取 → 未授权仓库写入 | CRITICAL | CICD-SEC-6, -4, -2 | flag1, flag2 |
| F-013 | 不安全的自动合并逻辑绕过代码审查(PR 范围的词差异启发式) | CRITICAL | CICD-SEC-1, -5 | flag10 |
| F-016 | CVE-2024-23897 — Jenkins CLI 在控制器上的任意文件读取 | CRITICAL | CICD-SEC-7 | flag8 |
| F-017 | GitLab 共享运行器注册令牌 → 实例范围的 CI/CD 机密窃取 | CRITICAL | CICD-SEC-2, -6 | flag11 |
| F-019 | 通过代理标签覆盖实现 Jenkins 控制器节点代码执行 | CRITICAL | CICD-SEC-5, -4 | flag5 |
| F-018 | 解耦流水线仓库 + 分支排除过滤器绕过 | HIGH | CICD-SEC-4, -6 | flag3 |
| F-020 | 共享代理文件系统暴露 FreeStyle 作业凭据 | HIGH | CICD-SEC-6, -5 | flag6 |
| F-021 | Checkov SAST 配置覆盖导致未被检测到的 IaC 错误配置 | HIGH | CICD-SEC-1, -8 | flag7 |
| F-014 | 从 CI/CD 流水线变量派生的 Flask 会话密钥 | HIGH | CICD-SEC-6 | flag11(经由 F-017) |
另有 6 项信息性 / 辅助性发现(阳性对照、RBAC 边界确认、轻微信息泄露)位于 findings/informational/。
各项发现如何串联
若干发现并非彼此独立——一项发现会直接促成或补全另一项。这部分在面试中往往比任何单项发现本身更能给人留下印象:
11 个 CTFd 挑战中已解决并验证 flag 的有 9 个——请参阅完整的挑战交叉引用,其中包括一个如实记录的案例(Dormouse/flag9),在该案例中访问控制边界在持续攻击下依然守住。
完整目录
以下每个文件都直接链接——文件夹树只是展示它们的组织方式。
📋 交战文档
| 文件 | 内容 |
|---|---|
docs/00-engagement-overview.md | 交战规则、范围、技术栈 |
docs/01-methodology.md | 贯穿始终的分阶段测试方法论 |
docs/02-owasp-top10-cicd-mapping.md | 完整的 CICD-SEC-1 至 -10 参考分类体系 |
docs/03-remediation-roadmap.md | 按优先级排列的可操作修复清单 |
docs/04-interview-prep.md | 每项发现的口语化摘要 + 可能的后续问题 |
docs/05-lessons-learned.md | 回顾——哪些有效、哪些无效、下次应如何改进 |
🔍 侦察
| 文件 | 内容 |
|---|---|
recon/01-fingerprinting.md | 阶段 1——对范围内每项服务进行未认证指纹识别 |
recon/02-authenticated-enumeration.md | 阶段 2——获得初始访问后进行认证枚举 |