Zashk0/gha-buildrs-rce-poc

GitHub: Zashk0/gha-buildrs-rce-poc

针对 Rust 项目 CI 工作流中恶意 build.rs 导致 GitHub Actions 自托管 Runner 远程代码执行的授权概念验证。

Stars: 0 | Forks: 0

# gha-buildrs-rce-poc 授权的概念验证(Proof-of-concept),演示了在自托管 GitHub Actions runner 接管攻击中使用的 `build.rs` RCE 原语。 本仓库是为提交给 Immunefi 的针对具有相同工作流模式的第三方项目的漏洞赏金而发布的。从未触及任何生产基础设施。下面“窃取”的“secret”是在这个先私有后公开的测试仓库上设置的虚假标记值。 ## 此 PoC 演示的模式 一个其 CI 工作流满足以下条件的仓库: 1. 在任何分支的 `pull_request` 上触发,且没有 actor 允许列表 (allowlist) 2. 在自托管 runner(或任何 runner)上运行 3. 对 PR head 代码调用 `cargo`(`cargo check`、`cargo test`、`cargo build` 等) 容易受到来自任何 pull request 的任意代码执行攻击,因为 Cargo 会无条件地执行每个 workspace crate 的 `build.rs` 构建脚本。构建脚本是普通的 Rust 二进制文件,没有沙箱。 ## 布局 - `.github/workflows/ci-build.yml` 映射了测试目标工作流的触发器和 `cargo` 调用模式 - `Cargo.toml` 和 `src/lib.rs` 是一个简单的 library crate - `attacker-poc` 分支添加了一个在 `cargo check` 期间运行的恶意 `build.rs` ## 复现步骤 1. Fork 或克隆此仓库 2. 查看 `attacker-poc` 分支: 3. 恶意的 `build.rs` 会运行 `whoami`、`hostname`,列出 `$HOME`,写入一个标记文件,发起出站 HTTPS 请求,并从环境变量中读取 `RUNNER_PRETEND_SECRET`(如果存在) 4. 从 `attacker-poc` 向 `master` 发起的 PR #1 触发了该工作流 ## 运行输出 捕获的运行记录 (过滤出 BUILDRS 行): ``` [BUILDRS:whoami] stdout=runner [BUILDRS:hostname] stdout=runnervmeorf1 [BUILDRS:pwd] stdout=/home/runner/work/gha-buildrs-rce-poc/gha-buildrs-rce-poc [BUILDRS:ls-home] stdout=total 60 | drwxr-x--- 11 runner runner 4096 May 3 14:52 . | ... .cargo .docker .rustup actions-runner work [BUILDRS:uname] stdout=Linux runnervmeorf1 6.17.0-1010-azure x86_64 GNU/Linux [BUILDRS:marker] wrote /home/runner/.poc-buildrs-was-here [BUILDRS:curl-egress] stdout=Keep it logically awesome. [BUILDRS:secret-len] 7 ``` 此次运行是在 GitHub 托管的临时 runner 上进行的,因此标记文件会随 VM 一起消失。针对非临时自托管 runner 的相同 payload 会写入持久化的主机文件系统,并且攻击者在工作区外植入的任何持久化内容(`~/.cargo/`、`~/.docker/`、`actions-runner/` 等)都将在不同作业间保留。 ## 演示范围内的内容 - 从 PR head 执行 Cargo 构建脚本 - 进程生成、文件系统读写、出站网络请求 - 环境变量访问(当工作流将 secrets 暴露给构建步骤时) ## 此 PoC 范围外的内容 - 持久化(需要实际的自托管 runner) - 后续作业的凭证拦截(同理) 持久化步骤是广为人知的 Adnan Khan / Praetorian 自托管 runner 接管技术。此 PoC 仅验证了入口点。 ## 许可证 这是一个安全研究产物。请勿对您无法控制的系统运行它。
标签:bug bounty, build.rs, Cargo, CI/CD安全, CISA项目, GitHub Actions, Immunefi, IP 地址批量处理, Llama, PoC, pull_request, RCE, Rust, 代码执行, 协议分析, 可视化界面, 恶意PR, 数据展示, 暴力破解, 权限提升, 沙箱逃逸, 环境变量泄露, 红队, 网络安全审计, 网络流量审计, 自动笔记, 自托管运行器, 通知系统