系统:运行中
← 返回所有攻击
SUPPLY CHAIN CRITICAL NEW

您的编码智能体在您输入之前就运行了 git —— 而命令由仓库决定

Manifold Security 于 2026 年 9 月 1 日披露了涉及七款命令行编码智能体的八项缺陷:收到的仓库自带的 git 配置指定了一个程序,智能体在启动时于沙箱之外执行它。

2026-09-08 // 6 min affects: claude-code, openai-codex, cursor-cli, goose, qwen-code, grok-build, hermes-agent

这是什么?

2026 年 9 月 1 日,Manifold Security 发布了 GitSpawn:涉及七款命令行 AI 编码智能体的八项发现。在这些场景中,别人发送给您的仓库可以指定一条命令,由智能体在您的机器上执行。截至发布时仍有四项未修复,且已在当前版本上重新确认。The Hacker News 次日进行了报道,并指出 OpenAI 当天也就 Codex 中同一类缺陷发布了三份自有公告,分别归功于三个互不相关的研究团队。

受影响的产品并非小众。Claude Code、OpenAI Codex、Cursor CLI、goose、Qwen Code、Grok Build 与 Hermes Agent —— 其中开源项目累计接近五十万 GitHub star,而仅 Claude Code 一项,按 Manifold 引用的 npm API 数据,月下载量就超过 7700 万次。

值得注意的是:这一切都与模型无关。没有提示词,没有注入,没有越狱。问题出在智能体尚未说出任何一句话之前就已派生的子进程。

工作原理

任何命令行编码智能体在打开一个目录时都会收集上下文:当前分支、哪些文件被修改、哪些路径被跟踪。它们都借助 git 来完成这件事 —— 在部分智能体上发生于启动阶段,早于工作区信任提示;在其中一款上,甚至早于用户完成身份认证。

问题在于这些调用继承了什么。

智能体在 ./received-project 中启动

   ├─ 派生:  git status --porcelain=2 --branch
   │          (或 git diff --name-only HEAD —— 选哪条并不重要)

   ├─ git 在回答前刷新索引

   ├─ 该刷新过程会查阅 core.fsmonitor
   │          ……而 git 从 ./received-project/.git/config 读取它

   └─ 这个值是一个"程序"。git 会执行它。
              → 以用户身份执行
              → 位于智能体沙箱之外
              → 没有审批提示,屏幕上不留痕迹

core.fsmonitor 是面向大型仓库的一项正当性能设置:git 不再逐一检查每个文件,而是询问一个辅助程序有哪些变更。这是有文档记载的既定行为,并且从仓库自身的配置文件中读取。正如 Cobalt 在去年 12 月的一篇红队文章中所写,这属于功能滥用而非漏洞 —— 是 git 的灵活性与现代 IDE 自动化的交汇点。Manifold 还确认了 Claude Code 中的第二条路径,经由一条审查命令触发,依赖的是同类型的另一个配置键;在该问题尚未修复期间,研究人员刻意未公开该键名。

投递方式是使此事仍可控的约束条件。克隆一个恶意 URL 不会产生任何后果。 git clonefetchpull 都不会携带仓库的本地配置。仓库必须以文件形式送达,且 .git 目录已在其中 —— 一个共享的 .zip、一个同步文件夹、一个共享网盘、一个 U 盘。而这恰恰是同事之间传递项目、顾问向客户交付成果的常见方式。

示例提示

在让智能体打开以文件形式收到的目录之前,可以交给它的一段防御性提示。它检查配置而不是信任配置,恶意取值已做屏蔽处理——重点是该设置的形态,而非可用的载荷。

# Defensive check — before opening a repo you RECEIVED as files
Read ./received-project/.git/config. Do not open the folder with an agent yet.
List every key whose value is a program:
  core.fsmonitor, core.hooksPath, filter.*.clean, filter.*.process, attr.tree
For each, report the key, its value, and whether that path is executable.
Never run a value you find. A hostile entry looks like:
  [core]
      fsmonitor = [REDACTED payload path]
Then re-check with a config-stripped call:
  git -c core.fsmonitor=false status --porcelain

注意它做什么:它从不执行找到的取值,最后一次调用剥离了仓库自身的配置而不是读取它。这正是业界要求厂商在 harness 内部落实的不变量。

为什么重要

影响范围是开发者账户,而非智能体会话。攻击者代码以用户权限执行:SSH 密钥、环境中的云凭据、shell 配置中的令牌、磁盘上的每一个仓库。智能体的权限模型从未见到这次调用,因为发起调用的正是智能体自身的代码。

有三点结构性问题值得记取。

沙箱从来就不在这条路径上。 业界已在审批提示与工具沙箱上投入了大量工程资源,针对的是模型决定采取的动作。而此处的一切发生在模型被联系之前。仅覆盖模型发起动作的控制措施,会让运行框架自身的子进程处于无防护状态。

信任提示来得太晚。 在 Claude Code 与 Hermes Agent 上,载荷在工作区信任提示被接受之前即已执行;在 Qwen Code 上,早于身份认证;在 Grok Build 上,在第一次按键时触发。在上下文收集之后才弹出的信任对话框只是装饰。

这是一类已知问题的重新发现。 Sonar 已于 2026 年 4 月报告过同一执行点,并在数年前于 Visual Studio Code 与 JetBrains 系列 IDE 中发现过同样的信任对话框绕过。Anthropic 曾在 2.0.34(2025 年 11 月)中调整启动顺序以关闭该问题;而 Manifold 发现同样的启动行为在 2.1.193(2026 年 6 月)中再次出现。当修复手段是调整执行顺序而非确立不变式时,回归是可预期的结果。

Manifold 的八份报告中有五份被标记为其他研究人员独立提交的重复项,其中一份与他们同日提交。多个团队正在同时收敛于这一攻击面。

防御措施

若您以文件形式收到仓库 —— 即任何并非通过 git clone 获得的内容:

  • 在用智能体打开该目录之前,先检查 .git/config。留意 core.fsmonitorcore.hooksPath,以及与 clean 或 process 过滤器并存的 attr.tree —— 任何取值为程序的设置项。
  • 直接检查可疑仓库:git config --get core.fsmonitor
  • 审计您的全局配置:git config --global --list | grep fsmonitor
  • 默认关闭该设置:git config --global core.fsmonitor false。您失去的只是一项绝大多数仓库从未需要的性能优化。
  • 优先使用克隆而非解压。若对方发来压缩包,可先推送到远端再克隆,或删除 .git 后重新初始化。

若您开发智能体产品 —— Manifold 与 OpenAI 共同推荐的修复方案:

  • 在每一次后台调用中剥离仓库配置,例如 git -c core.fsmonitor=false status。应对传入的配置键采用白名单,而非对已知键采用黑名单,因为 core.fsmonitor 并非唯一的执行汇聚点。
  • 将上下文收集移至工作区信任提示之后,并将该顺序视为受测试保障的不变式,而非一次性修补 —— 这一具体顺序此前已经回归过一次。
  • 让后台子进程运行在与模型发起的工具调用相同的沙箱内。当前这种分离状态 —— 运行框架自身的调用逃逸出边界 —— 正是根本原因。

在组织层面:固定并跟踪智能体版本(低于修复版本的安装仍处于暴露状态,无论厂商已发布什么),并在威胁模型中将”用智能体打开一个收到的目录”视为一次执行事件,而非一次读取。

状态

智能体报告时间Manifold 9 月 1 日复测时状态参考
goose2026-07-13已修复,1.44.0CVE-2026-72718,CVSS 4.0 基础分 7.0
Claude Code(core.fsmonitor2026-06-26已修复,2.1.196厂商未发布公告
Claude Code(审查路径)2026-07-15未修复 —— 在 2.1.252 上确认配置键由研究人员保留未公开
OpenAI Codex2026-07-20已修复 —— CLI 0.131.0,Desktop 26.519.xCVE-2026-19592 及另外两项
Cursor CLI2026-07-08已修复被判为更早报告的重复项
Qwen Code2026-07-07未修复 —— 在 0.22.3 上确认已被阿里巴巴 SRC 受理
Grok Build2026-07-14未修复 —— 在 1.0.13 上确认更早的报告被以”仅供参考”关闭
Hermes Agent2026-07-20未修复 —— 在 0.21.0 上确认CVE-2026-71963,由 VulnCheck 分配
在野利用无来源报告在野利用;截至 2026-09-02,上述编号均未列入 CISA KEV 目录

上述版本、日期与披露结果均依据 Manifold Security 与 The Hacker News 在所链接文章中的报道。Manifold 表示,在其未点名的其他智能体中也发现了相同模式,并同时保留了可直接使用的仓库样本与 Claude Code 的第二个配置键。请核对您实际安装的版本,而不要假定厂商补丁已经到达您手中。

Sources