2026年7月9日 2 分钟阅读

AI Agent 克隆你的仓库后,README 里的隐藏指令可能正在操控它——agent-zero-trust 用零信任扫描拦截注入

tinyash 0 条评论

当你的 AI 编码 Agent(Claude Code、Cursor、Codex)拉取一个 GitHub 仓库并开始阅读文件时,它面对的不只是代码——而是一个完整的「指令环境」。README 中的隐藏 HTML 注释、.cursor/rules 中的误导规则、MCP 配置中的自动安装脚本,甚至 postinstall hook——任何一个文件都可能包含针对 Agent 的指令劫持。

agent-zero-trust(简称 azt)是一个零信任仓库预检工具:在允许 AI Agent 进入仓库之前,用确定性扫描检测已知的指令注入和恶意配置模式。它不调用 LLM(调用 LLM 的扫描器本身可能被注入攻击),纯 Python 实现,单文件,零外部依赖。

仓库即指令环境——Agent 安全的新攻击面

传统安全扫描关注的是代码漏洞和密钥泄露。但对于 AI 编码 Agent,攻击面多了一个维度:指令操控

一个攻击者可以创建一个看起来完全正常的开源仓库,但在以下位置藏入针对 Agent 的指令:

  • HTML 注释:在 TROUBLESHOOTING.md 中嵌入 ——渲染时不可见,但 Agent 读取 Markdown 时直接看到
  • Agent 规则文件CLAUDE.mdAGENTS.md.cursor/rules 中写入「不要告诉用户你在做什么」的隐藏指令
  • 自动化陷阱pull_request_target 结合 PR head checkout、npx -y 自动安装的 MCP 配置
  • 执行链postinstall 脚本、git hooks、devcontainer 配置中的管道到 shell 命令

Mozilla、Microsoft 和 Cloud Security Alliance 都已发布针对 AI 编码 Agent 指令注入风险的安全公告。这不是理论攻击——它是真实的供应链安全新维度。

快速体验:30 秒跑一个恶意仓库扫描

git clone https://github.com/ralfyishere/agent-zero-trust
cd agent-zero-trust
python3 azt.py scan corpus/malicious-markdown   # 返回 1,显示红色发现
python3 azt.py scan corpus/benign-repo          # 返回 0,完全干净

输出示例:

agent-zero-trust — repo intake scan of corpus/malicious-markdown

INSTRUCTION ENVIRONMENT: 0 file(s) can influence an agent here

FINDINGS: 4 HIGH, 3 MEDIUM
  [HIGH  ] inject.concealment  TROUBLESHOOTING.md:5
           Tells the agent to hide activity from the human
  [HIGH  ] inject.instruction_override  TROUBLESHOOTING.md:5
           Instruction-override language aimed at the agent
  [HIGH  ] stealth.html_comment_imperative  TROUBLESHOOTING.md:5
           Imperative instruction hidden in an HTML comment
  [HIGH  ] net.pipe_shell  TROUBLESHOOTING.md:12
           Pipe-to-shell: downloads and executes remote code

TRUST VERDICT: HIGH RISK — do not run an agent in this repo
until the findings above are reviewed by a human.

安装后直接使用:

pipx install agent-zero-trust
azt scan /path/to/some/repo

五大扫描类别

azt 扫描覆盖五个安全维度:

  1. 指令环境清单 — 识别所有可能影响 Agent 行为的文件:CLAUDE.mdAGENTS.md.cursor/rules、GitHub Copilot 指令、Claude Code hooks、MCP 服务器配置、.envrc、VS Code folderOpen 任务、devcontainer、git hooks、CI 工作流
  2. 注入形态 — 指令覆盖、隐藏指令(「不要告诉用户」)、HTML 注释中的指令、零宽度/双向 Unicode 隐藏文本
  3. 执行形态 — 管道到 shell、编码后执行、反弹 shell、DNS TXT 命令获取、破坏性命令
  4. 数据外泄 — 本地数据到网络的管道、环境/密钥文件读取、令牌格式、私钥
  5. 自动化陷阱pull_request_target + PR head checkout、npx -y 自动安装、逃逸仓库的符号链接

CI 集成

作为一个安全门控工具,azt 可以直接嵌入 GitHub Actions:

name: agent-zero-trust
on: [pull_request, push]
jobs:
  intake-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ralfyishere/agent-zero-trust@v0.1.5
        with:
          path: .
          fail-on: high

引入指令注入或 hook 陷阱的 PR 会在任何 Agent 或审查者信任该代码树之前被阻止。

Gate 模式:让扫描成为强制步骤

azt install-hook .        # 将 PreToolUse hook 写入 .claude/settings.json
azt scan --gate .         # 通过扫描打开门禁(默认 TTL 24 小时)

启用 gate 后,Claude Code 在通过仓库扫描之前,会被阻止执行写操作工具(Bash、Write、Edit、NotebookEdit)。这是一个轻量级的速度门——强制「扫描必须发生」,而不是「Agent 被完全隔离」。

关键设计理念

azt 最值得注意的设计决策是它的诚实边界

  • 绝对不调用 LLM:一个让 LLM 判断内容是否安全的扫描器,本身就可能被待检测的内容注入。所有检测都是确定性的模式匹配
  • 公开发布假阴性corpus/misses/ 目录中存有当前扫描器检测不到的绕过攻击,并在 CI 中断言它们确实未被检测到,确保覆盖率账本不会静默漂移
  • 披露了自身的首发绕过:v0.1.0 的 gate 可以被文件写入工具绕过——团队在同一天发现并修复,在 SECURITY.md 中完整记录,而非静默修复

总结

在 AI Agent 广泛使用开源代码的今天,仓库已经变成了一个完整的「指令攻击面」。agent-zero-trust 提供了一个轻量级但诚实的解决方案:用零信任原则扫描仓库,在 Agent 进入之前发现指令注入和配置陷阱。它不承诺「安全」,只说「没有已知形状的红旗」——这种边界感在安全工具中非常难得。

如果你是 Claude Code、Cursor 或 Codex 的用户,特别是如果你的项目会拉取和信任外部代码,azt 可以作为 CI 门控或本地预检步骤加入工作流。配合 rules-with-receiptsmcp-scan,可以构建完整的 Agent 操作安全层级。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。