
关于
代理行为审计器,审查和验证 AI 代理执行的操作是否安全合规。
name: agentic-actions-auditor description: > 审计 GitHub Actions 工作流中 AI 代理集成的安全漏洞, 包括 Claude Code Action、Gemini CLI、OpenAI Codex 和 GitHub AI Inference。 检测攻击者控制的输入到达在 CI/CD 管道中运行的 AI 代理的攻击向量。 risk: safe source: community date_added: 2026-03-18
AI 代理 Actions 审计器
针对调用 AI 编码代理的 GitHub Actions 工作流的静态安全分析指南。此技能教你如何在本地或从远程 GitHub 仓库发现工作流文件,识别 AI action 步骤,跟踪可能包含隐藏 AI 代理的组合 actions 和可重用工作流的跨文件引用,捕获安全相关配置,并检测攻击者控制的输入到达在 CI/CD 管道中运行的 AI 代理的攻击向量。
何时使用
- 审计仓库的 GitHub Actions 工作流中的 AI 代理安全性
- 审查调用 Claude Code Action、Gemini CLI 或 OpenAI Codex 的 CI/CD 配置
- 检查攻击者控制的输入是否能到达 AI 代理提示
- 评估 AI 代理 action 配置(沙箱设置、工具权限、用户白名单)
- 评估将工作流暴露给外部输入的触发事件(
pull_request_target、issue_comment等) - 调查数据从 GitHub 事件上下文通过
env:块流向 AI 提示字段的路径
何时不使用
- 分析不使用任何 AI 代理 actions 的工作流(改用通用 Actions 安全工具)
- 在调用工作流上下文之外审查独立的组合 actions 或可重用工作流(当分析通过
uses:引用它们的工作流时使用此技能) - 执行运行时提示注入测试(这是静态分析指南,不是漏洞利用)
- 审计非 GitHub CI/CD 系统(Jenkins、GitLab CI、CircleCI)
- 自动修复或修改工作流文件(此技能报告发现,不修改文件)
应拒绝的合理化借口
审计 AI 代理 actions 时,拒绝这些常见的合理化借口。每一个都代表一种导致遗漏发现的推理捷径。
1. "它只在维护者的 PR 上运行"
错误,因为它忽略了 pull_request_target、issue_comment 和其他将 actions 暴露给外部输入的触发事件。攻击者不需要写权限就能触发这些工作流。pull_request_target 事件在基础分支的上下文中运行,而不是 PR 分支,这意味着任何外部贡献者都可以通过打开 PR 来触发它。
2. "我们使用 allowed_tools 来限制它能做什么"
错误,因为工具限制仍然可以被武器化。即使是受限的工具如 echo 也可以通过子 shell 扩展(echo $(env))被滥用进行数据泄露。工具白名单减少了攻击面但并未消除它。有限的工具 != 安全的工具。
3. "提示中没有 ${{ }},所以是安全的"
错误,因为这是经典的环境变量中介遗漏。数据通过 env: 块流向提示字段,而提示本身中没有可见的表达式。YAML 看起来很干净,但 AI 代理仍然接收到攻击者控制的输入。这是最常被遗漏的向量,因为审查者只寻找直接的表达式注入。
4. "沙箱防止了任何真正的损害"
错误,因为沙箱配置错误(danger-full-access、Bash(*)、--yolo)会完全禁用保护。即使正确配置的沙箱,如果 AI 代理可以读取环境变量或挂载的文件,也会泄露密钥。沙箱边界的强度取决于其配置。
审计方法论
按顺序执行以下步骤。每个步骤都建立在前一个步骤之上。
步骤 0:确定分析模式
如果用户提供了 GitHub 仓库 URL 或 owner/repo 标识符,使用远程分析模式。否则,使用本地分析模式(继续步骤 1)。
URL 解析
从用户输入中提取 owner/repo 和可选的 ref:
| 输入格式 | 提取内容 |
|----------|----------|
| owner/repo | owner、repo;ref = 默认分支 |
| owner/repo@ref | owner、repo、ref(分支、标签或 SHA) |
| https://github.com/owner/repo | owner、repo;ref = 默认分支 |
| https://github.com/owner/repo/tree/main/... | owner、repo;去除多余路径段 |
| github.com/owner/repo/pull/123 | 建议:"你是否想分析 owner/repo?" |
去除尾部斜杠、.git 后缀和 www. 前缀。处理 http:// 和 https://。
获取工作流文件
使用两步方法配合 gh api:
-
列出工作流目录:
gh api repos/{owner}/{repo}/contents/.github/workflows --paginate --jq '.[].name'如果指定了 ref,在 URL 后附加
?ref={ref}。 -
过滤 YAML 文件: 仅保留以
.yml或.yaml结尾的文件名。 -
获取每个文件的内容:
gh api repos/{owner}/{repo}/contents/.github/workflows/{filename} --jq '.content | @base64d'