已关闭
【安全】【漏洞挖掘】pre-commit 工作流在特权上下文检出并执行不可信 PR 代码,可窃取 ROBOT_TOKEN(pwn request) #14
liudongfang创建于  14 天前关闭于  5 天前
liudongfang成员
14 天前 创建

问题

pre-commit 工作流以特权上下文触发并执行不可信 PR 代码(pwn request):

  • .gitcode/workflows/pre-commit.yml:8 pull_request_target 与 :11 pull_request_comment(评论 /pre-commit 即触发,未校验评论者角色)触发的工作流可访问仓库 secrets
  • :44-49 Checkout 以 token: ${{ secrets.ROBOT_TOKEN }} 检出 PR 的 merge_commit_sha/head.sha,且 allow-unsafe-pr-checkout: true 显式关闭了 fork PR 检出拦截
  • :59-63 npm install 在 PR 检出目录执行不可信 package.json 生命周期脚本
  • :79 openlibing/pre-commit-action@v1.0.2 执行 PR 检出内容中的 .pre-commit-config.yaml 钩子
  • 作业运行在自托管 runner(self-hosted, region=overseas),工作流具备 pr: write

攻击路径:任意外部用户 fork 仓库 → 在 package.json postinstall 或 .pre-commit-config.yaml local hook 写入任意代码 → 提交 PR 或评论 /pre-commit → 在持有 ROBOT_TOKEN 的 runner 上执行任意命令并窃取令牌。

影响

CI/CD 供应链 RCE(CWE-829)。高危:凭据窃取(ROBOT_TOKEN)、以机器人身份篡改 PR 标签与仓库、自托管 runner 持久化污染并波及同 runner 其他任务。

建议修法

  • PR 代码检查改用 pull_request 触发的无 secrets 隔离工作流;标签操作与代码检查分离信任域
  • 删除 allow-unsafe-pr-checkout: true;确需特权触发时 ref 固定为可信 base SHA
  • npm install 添加 --ignore-scripts
  • checkout 步骤移除或最小化 ROBOT_TOKEN(最小只读)
  • 评论触发增加评论者角色校验
  • 轮换 secrets.ROBOT_TOKEN 并审计近期 CI 日志

对应漏洞编号 argus-prsyncaction-20261010144054-002,报告见 reports/ 目录。

likedislike
Lliudongfang成员
11 天前 修改标题为 “【安全】【漏洞挖掘】pre-commit 工作流在特权上下文检出并执行不可信 PR 代码,可窃取 ROBOT_TOKEN(pwn request)”,原标题为“【安全】【CI 供应链】pre-commit 工作流在特权上下文检出并执行不可信 PR 代码,可窃取 ROBOT_TOKEN(pwn request)”
YanZhaohongYanZhaohong成员
5 天前 关联了pull request:openLiBing代码仓代码度量扫描插件版本升级至v1.0.3
OopenLiBingCI成员
5 天前 关闭了 issue