前言¶
在 CI 里接入 Claude Code Action、OpenAI Codex、Gemini CLI 或 GitHub AI Inference 的做法越来越常见:用 Agent 自动审 PR、改代码、跑推理。这类步骤往往同时接触仓库权限、密钥和可被外部触发的 GitHub 事件上下文。若把攻击者可控输入直接或间接送进 Agent 的 prompt,或把沙箱、工具权限配得过宽,静态看 workflow YAML 很容易漏掉「环境变量中转」一类路径。
下面介绍 Trail of Bits 在 skills 市场里提供的 agentic-actions-auditor:一套面向 GitHub Actions 的静态审计指引,教 Agent 如何发现 workflow、识别 AI Action 步骤,并报告与 prompt 注入、沙箱配置相关的风险。它是分析指导,不是自动改文件的修复工具,也不做运行时 exploit 测试。
这是什么¶
agentic-actions-auditor 是 Claude Code / Codex 等环境里可加载的 Skill(SKILL.md 格式),归属 Trail of Bits Skills Marketplace,插件目录为 plugins/agentic-actions-auditor/。
官方描述概括为:对调用 AI 编码 Agent 的 GitHub Actions workflow 做静态安全分析,覆盖 Claude Code Action、Gemini CLI、OpenAI Codex、GitHub AI Inference 等集成;检测攻击者可控输入进入在 CI/CD 中运行的 AI Agent 的路径,包括环境变量中转、直接表达式注入、危险的沙箱配置、通配符用户白名单等。
Skill 声明允许使用的工具为:Read、Grep、Glob、Bash(Bash 仅用于通过 gh api 拉取远程仓库 workflow,且不得把拉取的 YAML 当作 shell 代码执行)。
核心功能¶
审计范围与识别对象¶
按官方「Known AI Action References」表,在每个 job 的 step(及需留意的 job 级 uses:)上,用 uses: 在 @ 之前的前缀匹配下列 Action(版本/ref 可忽略):
| Action Reference | 类型 |
|---|---|
anthropics/claude-code-action |
Claude Code Action |
google-github-actions/run-gemini-cli |
Gemini CLI |
google-gemini/gemini-cli-action |
Gemini CLI(legacy/archived) |
openai/codex-action |
OpenAI Codex |
actions/ai-inference |
GitHub AI Inference |
除主 workflow 外,还会沿 uses: 跟进 composite action 与 reusable workflow,避免 AI 步骤藏在被引用文件里。
方法论要点¶
审计按步骤递进(资料中的 Audit Methodology):
- 分析模式:用户提供 GitHub 仓库 URL 或
owner/repo(可选@ref)时走远程模式;否则在本地用 Glob 扫描仓库根目录.github/workflows/*.yml与*.yaml(不扫子目录、vendor、测试 fixture)。 - 发现 workflow:统计文件数量;若无文件则停止并报告。
- 识别 AI Action 步骤:对照上表匹配
uses:。 - 采集安全相关配置:触发事件、
env:、prompt 相关字段、沙箱与工具权限、用户 allowlist 等。 - 检测攻击向量:重点看 GitHub 事件上下文 →
env:→ Agent prompt 的数据流,以及直接${{ }}注入、危险沙箱项等。
远程拉取 workflow 时,官方要求用 gh api 两步:先列目录,再按文件取 base64 解码内容;若指定 ref,每一次 API 调用都要带 ?ref={ref}。不要求事先 gh auth status,失败再提示认证或权限问题。
常见误判(审计时要反驳)¶
Skill 明确列出四类容易自我安慰的理由,审计时不应采纳,例如:
- 仅维护者 PR 就安全 —— 忽略
pull_request_target、issue_comment等外部可触发事件。 allowed_tools已限制 —— 受限工具仍可能被滥用(如通过 subshell 泄露环境)。- prompt 里没有
${{ }}—— 经典 env var intermediary:数据经env:进入 prompt,YAML 表面干净。 - 沙箱够用 ——
danger-full-access、Bash(*)、--yolo等会关掉防护;配置不当仍可能读到密钥或挂载文件。
明确不做什么¶
- 不含 AI Agent 的 workflow:应改用通用 Actions 安全工具。
- 单独审 composite/reusable 且没有 caller workflow 上下文:不适用;应在引用它们的 workflow 里用本 Skill。
- 非 GitHub CI(Jenkins、GitLab CI、CircleCI 等)。
- 不自动修改 workflow,只报告发现。
安装与启用¶
Skill 随 trailofbits/skills 市场分发,安装市场后从插件菜单安装 agentic-actions-auditor 即可。
Claude Code:
/plugin marketplace add trailofbits/skills
然后通过 /plugin menu 浏览并安装对应插件。
Codex:
codex plugin marketplace add trailofbits/skills
codex plugin list
codex plugin add <plugin-name>@trailofbits
(将 <plugin-name> 换为市场中的插件名,agentic-actions-auditor 在 Code Auditing 分类下。)
本地开发时,在 skills 仓库的父目录执行:
/plugins marketplace add ./skills
ChatGPT Workspace 可通过仓库内 .claude-plugin/marketplace.json 导入;与 Cursor 专用的安装方式,以你当前环境文档为准,本 Skill 官方页未单独列出 Cursor 步骤。
Skill 本体路径:
https://github.com/trailofbits/skills/tree/main/plugins/agentic-actions-auditor/skills/agentic-actions-auditor
典型用法¶
在已启用该 Skill 的 Agent 对话中,按场景发起审计即可,例如:
- 「审计本仓库 GitHub Actions 里 AI Agent 的安全配置。」
- 「检查
owner/repo的 workflow,外部输入能否到达 Claude/Codex 的 prompt。」 - 「review CI/CD configurations that invoke Claude Code Action」——与官方 When to Use 表述一致。
本地模式:Agent 用 Glob 找 .github/workflows/ 下 YAML,Read 内容后按方法论出报告。
远程模式:提供 owner/repo、owner/repo@ref 或 https://github.com/owner/repo(及 tree/main/... 等形式)。Agent 用例如下命令拉取文件(示例为列目录):
gh api repos/{owner}/{repo}/contents/.github/workflows --paginate --jq '.[].name'
单文件内容:
gh api repos/{owner}/{repo}/contents/.github/workflows/{filename} --jq '.content | @base64d'
完成后应看到 workflow 数量、AI Action 实例与 findings 的汇总;无 workflow 时格式类似:「Analyzed 0 workflows, 0 AI action instances, 0 findings in owner/repo」。
适用场景与注意¶
适合:
- 仓库或组织在 CI 中已使用或计划使用上述 AI Action。
- 安全评审、开源贡献前自查:触发器是否暴露给 fork PR、issue 评论等;
pull_request_target与 base 分支上下文。 - 评估沙箱、工具权限、
allowed_users等 agentic 配置,而非只看 prompt 字符串。
限制:
- 静态分析指引,不能替代运行时 prompt 注入测试。
- 远程分析依赖
gh认证与对私有仓库的 token 权限。 - 拉取的 YAML 仅作数据分析,Skill 禁止用 Bash 将其 pipe 到解释器或
eval。
结尾¶
agentic-actions-auditor 把「CI 里跑 Agent」从功能问题拉回到数据流与配置问题:谁能在什么事件下触发 workflow、外部输入如何进入 prompt、沙箱是否名存实亡。团队若在 pipeline 里落地 Claude、Codex、Gemini 或 GitHub AI Inference,可在代码评审流程里加上这一步静态审计。
官方 Skill 目录:
https://github.com/trailofbits/skills/tree/main/plugins/agentic-actions-auditor/skills/agentic-actions-auditor
市场总览与安装说明:
https://github.com/trailofbits/skills