OWASP CICD-Goat 的完整 VAPT 报告 — 捕获 9 个 CTFd flag,4 个严重 + 5 个高危发现(含 CVE-2024-23897),映射至 OWASP Top 10 CI/CD 安全风险,附 PoC、修复建议及面试速览摘要。
针对 OWASP CICD-Goat 的完整漏洞评估与渗透测试——一个故意设计为存在漏洞的 CI/CD 环境(Jenkins、Gitea、GitLab、CTFd)——端到端映射至 OWASP Top 10 CI/CD 安全风险。
大多数 CI/CD 安全文章要么纯理论(用幻灯片解释"管道投毒执行"),要么纯 CTF 夺旗(一行"这是 flag,下一个")。本仓库试图两者皆非:以下每一项发现都是经过完整验证、有 PoC 支撑的漏洞,映射至特定的 OWASP CI/CD-SEC 风险类别,以你在面试或真实客户报告中实际想要的方式撰写——包括死胡同、错误假设,以及它们是如何被纠正的。
如果你正在准备 AppSec/DevSecOps/CI-CD 安全面试,准备涉及 CI/CD 工具链的渗透测试项目,或者只是想具体、动手地了解"管道投毒执行"或"凭据卫生不足"在实际流量中是什么样子——这篇文章就是为你写的。
完整交战规则:docs/00-engagement-overview.md。
⚠️ 本仓库中的所有测试均针对测试者自己的本地、一次性、故意存在漏洞的 Docker Compose 实验环境进行。 不涉及任何生产系统、共享基础设施或第三方数据。在自行尝试之前,请从官方仓库启动你自己的 CICD-Goat 副本。
另有 6 项信息性/辅助性发现(正向对照、RBAC 边界确认、轻微信息泄露)位于 findings/informational/。
若干发现并非独立——一项直接促成或完成另一项。这部分在面试中往往比任何单一发现本身更能打动面试官:
11 个 CTFd 挑战中解决了 9 个并通过 flag 验证——参见完整的挑战交叉引用,包括一个如实记录的案例(Dormouse/flag9),其中访问控制边界在持续攻击下保持住了。
以下每个文件均可直接链接——文件夹树仅展示它们的组织方式。
| 文件 | 内容 |
|---|---|
recon/01-fingerprinting.md | 阶段 1 — 对范围内每项服务的未认证指纹识别 |
recon/02-authenticated-enumeration.md | 阶段 2 — 获得初始访问后的认证枚举 |
| 文件 | 内容 |
|---|---|
ctfd/challenge-cross-reference.md | 完整的逐 flag 交叉引用,包括受阻的 Dormouse/flag9 调查和 Duchess/flag4 更正 |
.
├── 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
docs/04-interview-prep.md——每项主要发现的一段式口语化总结,以及常见追问问题。docs/03-remediation-roadmap.md——按优先级排列的可操作检查清单。docs/02-owasp-top10-cicd-mapping.md 开始,了解整个仓库围绕其组织的参考分类体系。此处的每项发现都映射至 OWASP Top 10 CI/CD 安全风险(2023)——完整参考表(CICD-SEC-1 至 CICD-SEC-10)位于 docs/02-owasp-top10-cicd-mapping.md,因为它在各项发现中被频繁引用。
本仓库记录的测试仅针对本地、自托管、故意存在漏洞的训练实验环境(OWASP CICD-Goat)进行,用于教育和作品集目的。此处没有任何内容针对、引用或曾对任何生产系统、第三方服务或真实凭据进行测试。请勿对本仓库中的任何技术用于你未拥有或未获得明确书面授权测试的系统。
"最好的渗透测试人员首先像开发者一样思考,其次才像攻击者。如果你理解代码为什么以某种方式编写,你总能发现比扫描器更多的东西。"
我对每个项目都采用三个阶段:
1. 先理解再攻击 — 阅读应用程序。像真实用户一样使用它。在接触任何工具之前先理解业务逻辑。
2. 手动优先,工具其次 — 自动化扫描器只能发现它们被配置来发现的东西。有趣的漏洞总是通过思考而非扫描发现的。
3. 像开发者一样报告 — 开发者无法理解或复现的发现,就是不会被修复的发现。
未来方向 — 红队: OSCP → CRTO → OSEP、CRTP、CRTL、CRTE
本内容采用 CC BY 4.0 许可。欢迎复用或改编本报告的任何部分——只需明确署名 Dheeraj Kumar Jayaswal 并附上指向本仓库的链接。CICD-Goat 本身是 Cider Security 的独立项目——去给原项目点个星吧。
LinkedIn — 欢迎咨询、合作和安全讨论。
欢迎反馈、更正和 PR(例如针对 flag9/Dormouse,或 CTFd 交叉引用中的 Duchess/flag4 后续)——参见 CONTRIBUTING.md。
| 仓库 | 内容 |
|---|
| 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/网络层分析和学习 |
| 字段 | 值 |
|---|
| 目标 | 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(范围界定 → 指纹识别 → 漏洞识别 → 漏洞利用) |
| ID | 标题 | 严重性 | OWASP CI/CD 映射 | CTFd Flag |
|---|
| F-010 | Jenkins 构建控制台日志中的密钥泄露 → 凭据窃取 → 未授权仓库写入 | 严重 | CICD-SEC-6, -4, -2 | flag1, flag2 |
| F-013 | 不安全的自动合并逻辑绕过代码审查(PR 级词差异启发式) | 严重 | CICD-SEC-1, -5 | flag10 |
| F-016 | CVE-2024-23897 — Jenkins CLI 控制器任意文件读取 | 严重 | CICD-SEC-7 | flag8 |
| F-017 | GitLab 共享 Runner 注册令牌 → 实例级 CI/CD 密钥窃取 | 严重 | CICD-SEC-2, -6 | flag11 |
| F-019 | 通过代理标签覆盖实现 Jenkins 控制器节点代码执行 | 严重 | CICD-SEC-5, -4 | flag5 |
| F-018 | 解耦管道仓库 + 分支排除过滤器绕过 | 高 | CICD-SEC-4, -6 | flag3 |
| F-020 | 共享代理文件系统暴露 FreeStyle 任务凭据 | 高 | CICD-SEC-6, -5 | flag6 |
| F-021 | Checkov SAST 配置覆盖导致未检测到的 IaC 错误配置 | 高 | CICD-SEC-1, -8 | flag7 |
| F-014 | Flask 会话密钥源自 CI/CD 管道变量 | 高 | CICD-SEC-6 | flag11(经由 F-017) |
| 文件 | 内容 |
|---|
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 | 回顾——哪些有效、哪些无效、下次如何改进 |
| 文件 |
|---|
| 文件 |
|---|
| F-006 — 私有仓库枚举缺口 |
| F-007 — 额外的 Jenkins 用户 |
| F-009 — Job Read 与 ExtendedRead |
| F-011 — 正确的 withCredentials 用法(正向对照) |
| F-012 — 凭据 API 连接中断 |
| F-015 — 匿名注册表枚举 |
| 认证 | 颁发机构 | 状态 |
|---|
| 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 (OSCE3 track) | OffSec | 🔄 进行中 |