OOOMETA/OS
← 返回洞察

2026 年 9 月 · 6 分钟阅读

解压即中招:恶意仓库能让 Claude Code、Codex、Cursor、Grok 执行代码

解压即中招:恶意仓库让 Claude Code 等 Agent 执行代码

关键定义

GitSpawn Manifold Security 命名的一类漏洞:AI 编码 Agent 在后台用 git 收集上下文时未剥离仓库自带的 git 配置,恶意设置(如 core.fsmonitor)让仓库以文件形式到达时,就在宿主上以开发者权限执行任意代码。

core.fsmonitor git 的性能设置:为大型仓库,git 不再逐一检查磁盘文件,而是调用一个辅助程序询问哪些文件变了,并在索引刷新时运行它。git 从仓库自己的 .git/config 读取这个设置——仓库可以自己指定要跑的命令。

上下文收集(context gathering) CLI AI Agent 启动时在后台执行的流程:用 git 弄清当前分支、改动文件、变更内容等,发生在用户输入提示词之前(有的甚至早于认证),是本次漏洞的入口。

9 月 1 日,Manifold Security 发布研究 GitSpawn:用 Claude Code 打开一个文件夹,它会在你输入任何内容之前跑一条 git status 收集上下文——如果这个文件夹是从别处来的,那么仓库本身决定了这条命令实际执行了什么。多个主流编码 Agent(Claude Code、Goose、Grok Build、Qwen Code、Hermes,Codex 与 Cursor 同属此类)在后台用 git 收集上下文时没有剥离仓库自带的 git 配置,恶意仓库可以在信任提示之前、沙箱之外,以开发者权限执行任意代码。

机制:『你没跑的那条 git』

CLI AI Agent 启动时都在做同一件事:后台收集项目上下文。它们用 git 完成——当前分支、改了哪些文件、变更涉及什么。问题是:这些上下文收集调用没有剥离仓库自身的 git 配置,而 git 里有几种设置是命令执行点。

core.fsmonitor 是为大型仓库准备的性能设置:git 不再逐一检查磁盘文件,而是调用一个辅助程序询问哪些文件变了。git 从仓库自己的 .git/config 读取它。所以一个仓库可以自带这样一段配置:

[core]
fsmonitor = <command>

然后任何会刷新索引的 git 命令——git status、git diff,Agent 用哪条都无所谓——都会运行这个命令。执行链是:Agent 启动 → 后台 git status/diff → 索引刷新 → 仓库 .git/config 里指定的命令 → 以你的权限在宿主上运行。这是 Agent 自己的代码 spawn 的子进程,所以跑在沙箱外、没有批准提示,权限模型根本看不到它。

传播方式:不是 clone,是『以文件形式到达』

这里值得精确说明,因为 git 本身从不携带这个东西:克隆一个恶意 URL 不会触发,fetch、pull 也不会。仓库必须带着它的 .git 目录以文件形式到达——共享的 zip、共享盘、同步文件夹、U 盘。同事之间传项目、顾问给客户交付项目,都是这种方式。Manifold 的每个 PoC 用的都是 zip。

波及范围:7 个 Agent,8 个发现,4 个未修复

Goose — 已修复

goose review 构建 diff 时触发。受影响 1.41.0,修复于 1.44.0。CVE-2026-72718,维护者评分 7.0,在我们的报告之后分配。

Claude Code(core.fsmonitor) — 已修复

启动时在沙箱外以内部子进程跑 git status。确认于 2.1.193,修复于 2.1.196。我们的报告被标记为同日另一报告的重复。

Claude Code(ultrareview) — 未修复

不是 core.fsmonitor,而是同类的另一个 git 设置,review 路径没有剥离它。恶意命令在启动时、工作区信任提示出现之前就会执行。2.1.252 确认仍未修复。

Qwen Code — 未修复

启动时跑 git status 收集上下文。0.19.6 报告给阿里 SRC 并被接受,0.22.3 确认仍未修复。注意触发点早于用户认证。

Grok Build — 未修复

用 git 收集上下文。最早 7 月 1 日同类报告被 xAI 关闭为『informative』;我们的报告 7 月 14 日被标记为重复。1.0.13 确认仍未修复。

Hermes Agent — 未修复

在会话目录跑 git status 收集仓库上下文,未剥离仓库配置。0.18.2 报告后,五个渠道六次联系没有收到分诊,0.21.0 确认仍未修复;CVE-2026-71963 由独立 CNA VulnCheck 分配。

Codex 与 Cursor — 已修复

属同类机制但变体不同,均已在发布前被修复;Manifold 的报告被标记为其他研究者已提交的重复。

为什么这是系统性问题

这不是某个厂商的孤立 bug。所有被检查的 Agent 都在用同一个流程:用 git 收集上下文,而不清理仓库配置。Manifold 的 8 个报告里 5 个被标记为其他研究者已经独立提交的重复,其中一个是同一天提交的。这意味着这个问题正被多方独立发现——它不是研究上的偶然,而是编码 Agent 底层管道的普遍缺陷。

覆盖面也说明问题:仅 Claude Code 每月就有超过 7700 万次 npm 下载;被点名的几个项目在 GitHub 上合计接近 50 万 star。编码 Agent 已经从可选工具变成了团队默认的开发入口——而这个入口可以在用户毫无察觉的情况下执行任意代码。

对企业与开发者意味着什么

编码 Agent 是新的供应链端点

打开一个 zip 或共享目录让编码 Agent 工作,等于让这段代码在你机器上获得执行权。开发者的机器里有 SSH 密钥、云凭据与所有仓库——这是攻击者最想要的目标。

升级不等于修复

4 个发现发布时仍未修复,而且同类的其他 git 设置(非 core.fsmonitor)也存在。先确认你的版本是否已修复,别假设『最新版就安全』。

把编码 Agent 当沙箱对象对待

对运行编码 Agent 的开发机,用操作系统级隔离与网络出口控制限制 Agent 进程;对来自外部(zip、共享盘、客户交付)的仓库,先检查 .git/config 再打开。

三步行动

检查你用的编码 Agent 版本是否已修复

对照受影响清单核对版本:Claude Code ≥2.1.196(core.fsmonitor 已修,但 ultrareview 未修)、Goose ≥1.44.0;Qwen Code、Grok Build、Hermes 暂未修复——为这些 Agent 采取额外防护。

把外部仓库当成不可信代码

打开 zip、共享盘或客户交付的项目前,先检查 .git/config 里有没有可疑的设置(core.fsmonitor、core.pager、alias 等命令执行点)。开发团队统一这个检查动作。

为编码 Agent 加操作系统级隔离

在受控环境或沙箱里运行编码 Agent,限制网络出口,隔离开发机的凭据与密钥;如果 Agent 支持,关闭后台自动 git 上下文收集或强制 sanitize 配置(例如 git -c core.fsmonitor=false)。

参考来源

常见问题

GitSpawn 是什么?+

Manifold Security 9 月 1 日披露的一类编码 Agent 漏洞:Agent 启动时后台跑 git 收集上下文,却没有剥离仓库自身的 git 配置,恶意 core.fsmonitor 等设置会在索引刷新时于宿主上以开发者权限执行任意命令——发生在工作区信任提示之前、沙箱之外。

攻击者能得到什么?+

以开发者权限在沙箱外执行任意代码,屏幕上没有任何显示、无需批准提示。包括 SSH 密钥、环境里的云凭据、shell 配置里的 token、磁盘上所有仓库,以及在这台机器上的立足点。

恶意仓库是怎么传播的?+

不能靠 git clone——克隆恶意 URL、fetch、pull 都不会触发。仓库必须带着 .git 目录以文件形式到达:共享 zip、共享盘、同步文件夹、U 盘。同事之间传项目、顾问给客户交付就是这样。

哪些 Agent 受影响?+

Manifold 披露了 7 个 Agent 上的 8 个发现(Claude Code ×2、Goose、Grok Build、Qwen Code、Hermes,Codex 与 Cursor 属同类但已修复)。发布时 4 个未修复:Qwen Code、Grok Build、Claude Code ultrareview、Hermes(CVE-2026-71963)。Goose 已修(CVE-2026-72718),Claude Code 的 core.fsmonitor 变体已修。

为什么说这是系统性问题?+

因为这不是单个厂商的 bug:所有被检查的 agent 都用『git 收集上下文而不清理仓库配置』的同一流程,Manifold 的 8 个报告里 5 个被标记为其他研究者已独立提交的重复。同一缺陷被多方同时发现,说明它是编码 agent 底层的普遍问题。