背景
当前 PR-Agent workflow 把多个供应链风险放在一个执行路径里:pull_request_target、repo secrets、写权限、第三方 action 的 mutable ref。这个 issue 只跟踪 PR-Agent workflow 的供应链与 secrets 暴露面。
风险
pull_request_target 使用 base repo 的安全上下文。当前 workflow 虽然没有 checkout PR 分支代码,但它执行的是 the-pr-agent/pr-agent@main。如果上游 action 的 main 分支被篡改、误发布或供应链被攻陷,该 action 会在本仓库上下文里拿到:
GITHUB_TOKEN
OPENAI_KEY
- issues / pull-requests write 权限
- repo contents read 权限
代码证据
.github/workflows/pr-agent.yml:3-7:使用 pull_request_target
.github/workflows/pr-agent.yml:16-19:授予 issues: write、pull-requests: write、contents: read
.github/workflows/pr-agent.yml:22-33:uses: the-pr-agent/pr-agent@main,并注入 GITHUB_TOKEN / OPENAI_KEY
建议修复
- 把
the-pr-agent/pr-agent@main pin 到完整 commit SHA。
- 复查 token permissions,能只读就只读,只有需要评论时才给最小写权限。
- 评估外部 PR 是否必须走 secrets;如果不是,改成
pull_request 的无 secrets 路径或手动/allowlist 触发。
- 对
issue_comment 触发路径做同样的权限与触发人校验。
验收标准
关联
背景
当前 PR-Agent workflow 把多个供应链风险放在一个执行路径里:
pull_request_target、repo secrets、写权限、第三方 action 的 mutable ref。这个 issue 只跟踪 PR-Agent workflow 的供应链与 secrets 暴露面。风险
pull_request_target使用 base repo 的安全上下文。当前 workflow 虽然没有 checkout PR 分支代码,但它执行的是the-pr-agent/pr-agent@main。如果上游 action 的main分支被篡改、误发布或供应链被攻陷,该 action 会在本仓库上下文里拿到:GITHUB_TOKENOPENAI_KEY代码证据
.github/workflows/pr-agent.yml:3-7:使用pull_request_target.github/workflows/pr-agent.yml:16-19:授予issues: write、pull-requests: write、contents: read.github/workflows/pr-agent.yml:22-33:uses: the-pr-agent/pr-agent@main,并注入GITHUB_TOKEN/OPENAI_KEY建议修复
the-pr-agent/pr-agent@mainpin 到完整 commit SHA。pull_request的无 secrets 路径或手动/allowlist 触发。issue_comment触发路径做同样的权限与触发人校验。验收标准
关联