Pentesting CI/CD Methodology
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
VCS
VCS 是 版本控制系统 (Version Control System),该系统允许开发者管理他们的源代码。最常见的是 git,你通常会在以下平台中看到公司使用它:
- Github
- Gitlab
- Bitbucket
- Gitea
- Gitblit
- Cloud providers (they offer their own VCS platforms)
CI/CD Pipelines
CI/CD pipelines 使开发者能够自动执行代码以完成多种目的,包括构建、测试和部署应用。这些自动化工作流由特定的操作触发,例如 code pushes、pull requests 或计划任务。它们有助于简化从开发到生产的流程。
但是,这些系统需要在某处执行,并且通常需要有特权的凭证来部署代码或访问敏感信息。
VCS Pentesting Methodology
Note
即便一些 VCS platforms 允许为此部分创建 pipelines,我们在本节中只分析对源代码控制的潜在攻击。
托管项目源代码的平台包含敏感信息,因此必须非常小心在该平台内授予的权限。以下是攻击者可能滥用的一些常见问题:
- Leaks: 如果你的代码在提交中包含 leaks,且攻击者可以访问 repo(因为它是 public 或者他已有访问权限),他可能会发现这些 leaks。
- Access: 如果攻击者能访问 VCS platform 内的一个账户,他可能会获得更多的可见性和权限。
- Register: 一些平台允许外部用户直接创建账户。
- SSO: 有些平台不允许直接注册,但允许任何拥有有效 SSO 的人访问(例如攻击者可以用他的 github 账户登录)。
- Credentials: Username+Pwd, personal tokens, ssh keys, Oauth tokens, cookies… 有多种类型的令牌可以被窃取,从而以某种方式访问 repo。
- Webhooks: VCS platforms 允许生成 webhooks。如果这些 webhooks 未用不可见的 secret 保护,攻击者可能会滥用它们。
- 如果没有 secret,攻击者可能滥用第三方平台的 webhook。
- 如果 secret 在 URL 中,同样会发生并且攻击者也会拥有该 secret。
- Code compromise: 如果恶意行为者对仓库拥有某种写入权限,他可能尝试注入恶意代码。要成功,他可能需要绕过 branch protections。这些操作可以出于不同目的:
- 攻破 main branch 以影响 production。
- 攻破 main(或其他分支)以感染开发者的机器(因为他们通常在机器上运行测试、terraform 或其他在 repo 内的任务)。
- Compromise the pipeline(见下一节)
Pipelines Pentesting Methodology
定义 pipeline 最常见的方式,是使用托管在仓库中的 CI 配置文件来描述。该文件说明执行作业的顺序、影响流程的条件以及构建环境设置。
这些文件通常有统一的名称和格式,例如 — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI),以及位于 .github/workflows 下的 GitHub Actions YAML 文件。当触发时,pipeline 作业会从选定源(例如 commit / branch)拉取代码,并针对该代码运行 CI 配置文件中指定的命令。
因此,攻击者的最终目标是以某种方式篡改这些配置文件或它们执行的命令。
Tip
一些托管的 builder 允许贡献者选择 Docker build context 和 Dockerfile 路径。如果 context 可被攻击者控制,你可以将其设置到仓库外(例如 “..”)以在构建期间读取主机文件并外泄 secrets。参见:
{{#ref}} docker-build-context-abuse.md {{#endref}}
PPE - Poisoned Pipeline Execution
Poisoned Pipeline Execution (PPE) 路径利用 SCM 仓库中的权限来操纵 CI pipeline 并执行有害命令。拥有必要权限的用户可以修改 CI 配置文件或 pipeline 作业使用的其他文件以包含恶意命令。这会“污染”CI pipeline,导致这些恶意命令被执行。
要成功执行 PPE 攻击,恶意行为者需要能够:
- 拥有对 VCS platform 的写入访问,因为通常 pipeline 在 push 或 pull request 时被触发。(查看 VCS pentesting methodology 了解获取访问权限的汇总方式)。
- 注意有时外部 PR 也会被视为“写入访问”。
- 即便他有写入权限,他也需要确保能修改 CI 配置文件或配置所依赖的其他文件。
- 为此,他可能需要能够绕过 branch protections。
PPE 有 3 种变体:
- D-PPE: Direct PPE 发生在攻击者直接修改将被执行的 CI 配置文件时。
- I-DDE: Indirect PPE 发生在攻击者修改 CI 配置所依赖的文件(例如 make 文件或 terraform 配置)时。
- Public PPE or 3PE: 在某些情况下,pipelines 可以被没有仓库写入权限的用户触发(这些用户可能甚至不是组织成员),因为他们可以发送 PR。
- 3PE Command Injection: 通常,CI/CD pipelines 会用关于 PR 的信息设置环境变量。如果该值可被攻击者控制(例如 PR 的标题)且被用于危险的地方(比如执行 sh 命令),攻击者可能在其中注入命令。
Exploitation Benefits
了解了三种污染 pipeline 的方式后,我们来看攻击者成功利用后可能获得的收益:
- Secrets: 如前所述,pipeline 的作业需要获取特权(检索代码、构建、部署等),这些特权通常以 secrets 的形式存在。这些 secrets 通常可以通过 env 变量或系统内的文件访问。因此攻击者会尽可能外泄大量 secrets。
- 根据 pipeline 平台的不同,攻击者可能需要在配置中指定 secrets。这意味着如果攻击者不能修改 CI 配置 pipeline(例如 I-PPE),他只能外泄该 pipeline 所具有的 secrets。
- Computation: 代码在某处被执行,取决于执行位置,攻击者可能进一步横向移动。
- On-Premises: 如果 pipelines 在本地执行,攻击者可能进入内部网络并访问更多资源。
- Cloud: 攻击者可能访问云中的其他机器,也可能外泄 IAM roles/service accounts 的 tokens以获取云内的进一步访问。
- Platforms machine: 有时作业会在 pipelines platform 的机器内执行,这些机器通常位于云中且没有更多权限。
- Select it: 有时 pipelines platform 配置了多种机器,如果你能修改 CI 配置文件,你可以指定要在哪台机器上运行恶意代码。在这种情况下,攻击者可能会在每台可用机器上运行反向 shell 以尝试进一步利用。
- Compromise production: 如果你在 pipeline 内部并且最终版本就是从这里构建和部署的,你可以篡改将在生产中运行的代码。
More relevant info
Tools & CIS Benchmark
- Chain-bench 是一个开源工具,用于基于新的 CIS Software Supply Chain benchmark 对你的软件供应链堆栈进行安全合规审计。审计关注整个 SDLC 过程,可以揭示从代码阶段到部署阶段的风险。
Top 10 CI/CD Security Risk
查看 Cider 关于前十个 CI/CD 风险的有趣文章: https://www.cidersecurity.io/top-10-cicd-security-risks/
Labs
- 在每个平台的本地运行示例中,你会找到如何在本地启动它的说明,以便你可以按需配置来测试。
- Gitea + Jenkins lab: https://github.com/cider-security-research/cicd-goat
Automatic Tools
- Checkov: Checkov 是一个针对基础设施即代码的静态代码分析工具。
References
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

