Skip to content

参考

方法论/主题叶——以 Trail of Bits 安全研究 + trailofbits/skills 相关 skill 为代表锚定,生态另有 agent-skillguard 等第三方。

速查

  • 代表锚定 skill(CC-BY-SA-4.0)agentic-actions-auditor / supply-chain-risk-auditor / seatbelt-sandboxer / insecure-defaults / sharp-edges
  • 生态agent-skillguard(声明 vs 行为漂移)、Repello 审计方法论
  • Trail of Bits 研究:4 恶意 skill 绕过所有测试的 skill 扫描器
  • 防御纵深 4 层:人工审计 → 行为对比 → 运行时沙箱 → CI/CD + 依赖审计
  • CI/CD 9 向量:A–I(env 中介 / 直插 / CLI fetch / PR target / 日志注入 / subshell / eval / 危险沙箱 / 通配 allowlist)

SKILL.md 作为攻击面:清单

攻击面描述典型向量
Prompt injectionskill 内嵌恶意指令,劫持 agentSKILL.md 正文、references、scripts 藏指令
声明/行为漂移SKILL.md 声明 A,实际做 B偷偷外发数据、改敏感文件、加恶意 postinstall
CI/CD prompt injection攻击者可控输入经 env: 进 AI promptpull_request_target / issue_comment / ${{ github.event.* }}
危险 sandbox 配置沙箱被"通配放行"架空danger-full-access / Bash(*) / --yolo / safety-strategy: unsafe
通配 allowlist谁都能触发 agent actionallowed_non_write_users: "*" / allow-users: "*"

防御工具表

工具 / 方法层级平台一句话
agentic-actions-auditorCI/CD 审计GitHub Actions扫 AI agent(Claude Code Action/Gemini CLI/Codex/GitHub AI Inference)的 9 类攻击向量
supply-chain-risk-auditor依赖审计跨平台按风险准则标红项目依赖(single maintainer/unmaintained/缺 contact 等)
seatbelt-sandboxer运行时沙箱仅 macOS最小权限 allowlist 沙箱配置生成
insecure-defaults / sharp-edges安全默认跨平台配合上述识别默认危险配置
agent-skillguard(npm)行为对比跨平台SKILL.md 声明 vs 观测行为漂移检测
Repello 审计方法论人工审计跨平台安装前逐行读 SKILL.md、列 zip 全部文件、查恶意行为

CI/CD 攻击向量 9 类(agentic-actions-auditor)

向量名称关键检查
AEnv Var Intermediaryenv:${{ github.event.* }} + prompt 读该 env
BDirect Expression Injection${{ github.event.* }} 直插 prompt/system-prompt
CCLI Data Fetchprompt 里 gh issue view / gh pr view / gh api
DPR Target + Checkoutpull_request_target + checkout PR head
EError Log InjectionCI 日志、build 输出、workflow_dispatch 输入进 prompt
FSubshell Expansion工具允许 list 含支持 $() 的命令
GEval of AI Outputeval/exec/$() 消费 steps.*.outputs.*
HDangerous Sandbox Configsdanger-full-access / Bash(*) / --yolo / safety-strategy: unsafe
IWildcard Allowlistsallowed_non_write_users: "*" / allow-users: "*"

向量 H、I 是放大器:单独存在是 Low/Info,与 A–G 任一叠加就放大严重度。

已识别的 AI Action(agentic-actions-auditor)

Action Reference类型
anthropics/claude-code-actionClaude Code Action
google-github-actions/run-gemini-cliGemini CLI
google-gemini/gemini-cli-actionGemini CLI(legacy/archived)
openai/codex-actionOpenAI Codex
actions/ai-inferenceGitHub AI Inference

依赖风险准则速查(supply-chain-risk-auditor)

满足任一即标红(仅记录有风险的依赖;不在报告里 = 低风险):

  • Single maintainer / 个人——非组织维护;知名者(如 sindresorhus)降一级但风险仍在
  • 匿名维护者——GitHub 身份无法对应真实人,风险显著更大
  • Unmaintained——长期不更新、已 archive、声明 inactive;feature request 类 issue 不算未响应
  • Low popularity——Star/下载显著低于同类依赖
  • High-risk features——FFI / 反序列化 / 三方代码执行
  • Past CVEs——高/危 CVE 多(相对于流行度)
  • 缺 security contact——.github/SECURITY.md / CONTRIBUTING / README 均无联系方式

参考 left-pad 事件——single maintainer 被钓鱼/贿赂即可单方推恶意代码。

macOS Seatbelt 资源分类

seatbelt-sandboxer 把沙箱权限按这些类拆(从 deny default 开始按需 allow):

File Read · File Write · Network · Process · Mach IPC · POSIX IPC · Sysctl · IOKit · Signals · Pseudo-TTY · System · User Prefs · Notifications · AppleEvents · Camera/Mic · Dynamic Code · NVRAM

多子命令(如 build / serve)的 app:分别建 profile,配 helper 脚本按子命令路由。

反模式(不要这么做)

  • 只信自动扫描器(Trail of Bits 已证可被绕过)
  • 只读 SKILL.md 不跑行为对比(漂移读不出来)
  • sandbox 配 danger-full-access / Bash(*) / --yolo(等于没沙箱)
  • allowed_tools 限制即心安(echo $(env) 即可外泄)
  • "prompt 里没 ${{ }} 就安全"(env 中介骗肉眼)
  • "只在维护者 PR 上跑"(pull_request_target 任意外部 PR 可触发)
  • pull_request_target + checkout PR head(经典 RCE 路径)

资源链接