AREX Feed Article
Manifold 披露 GitSpawn:恶意 .git/config 可令 7 款编码 Agent 执行命令,4 条路径仍未修复
安全公司 Manifold Security 于 9 月 1 日以 GitSpawn 为名披露了一类影响命令行 AI 编码 Agent 的漏洞:称,8 个缺陷波及 7 款产品:goose、Claude Code、Hermes Agent、Qwen Code、Grok Build、Codex 与 Cursor,其中 Claude Code 占两条独立路径。核心机制是:仓库以文件形式(压缩包、共享网盘、同步文件夹或 U 盘)到达开发者机器时,其自带 .git/config 中 core.fsmonitor(文件系统监视器)指向的命令,会被 Agent 以用户权限、在沙箱之外、没有任何审批提示地执行。攻击者拿到的是开发者身份下的任意代码执行:SSH 密钥、环境里的云凭证、shell 配置中的令牌、磁盘上的每一个仓库,外加机器上的一个立足点。
修复与未修复的边界已经清楚:goose 1.44.0、Claude Code 2.1.196(core.fsmonitor 路径)与 Cursor 已堵住对应缺陷,OpenAI 也在 9 月 1 日自行发布了 3 个覆盖 Codex 同类问题的 CVE(通用漏洞披露编号);但 9 月 1 日复测时,Hermes Agent、Qwen Code、Grok Build 与 Claude Code 的 claude ultrareview 路径仍会执行仓库提供的命令。做了独立核验:截至当天没有任何已知利用,美国 CISA 的已知被利用漏洞目录(KEV)未收录相关 CVE,Anthropic 也没有为 Claude Code 的两条发现发布安全公告。
core.fsmonitor:为提速而设的 Git 配置,成了命令执行入口
core.fsmonitor 是 Git 为大型仓库设计的性能选项:它的值是一个帮助程序命令,Git 靠它判断哪些文件发生了变化,而不是逐个扫描磁盘,这是文档化的预期行为。问题在于,Git 从仓库自己的 .git/config 读取这个设置:仓库可以自带 [core] fsmonitor = <command>,任何触发索引刷新的操作(git status、git diff 都在其列)都会运行该命令。
Agent 恰好依赖这类命令。启动时,它们会在后台调用 git status、git diff 收集上下文:当前在哪个分支、哪些文件被改动。Manifold 的观察是,这些上下文收集调用没有剥离仓库自带的 Git 配置:仓库点名一个命令,git 就以用户权限、在宿主机上、在任何审批提示之前运行它。
git 本身不会携带这份配置:clone 一个恶意地址、fetch 或 pull 都不会触发,只有仓库以「文件 + 完整 .git 目录」的形式到达才会。zip、共享网盘、同步文件夹、U 盘都是载体,同事互传项目、咨询公司向客户交付代码都走这条路,Manifold 的每个概念验证(PoC)用的都是一个 zip 文件。触发时机因产品而异:在 Claude Code 与 Hermes Agent 上,攻击载荷(payload)在用户接受工作区信任(workspace-trust)提示之前触发;在 Qwen Code 上,早于用户完成认证;在 Grok Build 上,第一次按键即执行。
goose 的 review 命令是这条链路的典型样本:它调用系统 git 收集 diff 供审查,只传了一个配置标志 -c core.quotePath=off,其余一概未剥离。goose 的安全公告把后果写得很直接:「在恶意仓库里运行 goose review 就是执行攻击者代码:没有提交的提示,没有模型调用,没有工具审批,没有信任提示,命令在 goose 联系模型之前就已执行。」Manifold 对这类漏洞的定性是:「漏洞不在模型里,也不在任何新东西里。它藏在底层普通的管道里:Agent 在会话启动时为了弄清自己身处何处而派生的那个子进程。」它同时表示,同类问题存在于更多没有点名的 Agent 中。
受影响版本与修复版本:8 个缺陷逐款核对
Manifold 称,每一条仍在线的路径都在发布前于当时的最新版本上复测确认。受影响版本与修复情况如下(版本范围据 The Hacker News 汇总):
| 产品 | 受影响版本 | 状态 |
|---|---|---|
| goose | 1.44.0 之前的所有版本(1.41.0 上确认) | 1.44.0 已修复;CVE-2026-72718 |
| Claude Code(core.fsmonitor 路径) | 2.1.193 确认 | 2.1.196 已修复 |
| Claude Code(claude ultrareview 路径) | 2.1.210 报告,2.1.252 复测 | 未修复 |
| Hermes Agent | 0.18.2、0.21.0 | 未修复 |
| Qwen Code | 0.19.6、0.22.3 | 未修复 |
| Grok Build | 0.2.93、1.0.13 | 未修复 |
| Codex CLI | 0.102.0~0.130.0 | 0.131.0 已修复 |
| Cursor | 版本未披露(7 月 8 日报告) | 已修复 |
复测数字说明问题不在某个旧版本上:Hermes Agent 从 7 月 19 日确认的 0.18.2 走到 0.21.0,Qwen Code 从 0.19.6 走到 0.22.3,Grok Build 从 0.2.93 走到 1.0.13,版本在更新,漏洞没有消失。Claude Code 的 ultrareview 路径 7 月 15 日在 2.1.210 上报告、9 月 1 日在 2.1.252 上复测仍可触发。按 Manifold 给出的规模数字,问题不在小众工具上:Claude Code 的 npm 包每月下载量超过 7,700 万次,报告详细展开的五个项目(Hermes、Claude Code、Goose、Qwen Code、Grok Build)GitHub star 合计接近 50 万。
goose 拿到唯一 CVE 评分,Hermes 的公告从未被处理
所有发现都是私下提交的。8 份报告中,5 份被关闭为「与其他研究者独立提交的发现重复」,其中 1 份与对方同日提交。Manifold 写道:「这类问题正被从不止一个方向发现。」
goose 是 8 个缺陷中唯一带着已发布 CVE 编号收尾的:7 月 13 日报告后,维护方确认了漏洞,GitHub 分配 CVE-2026-72718,公告将发现者记为 Francisco Rosales(GitSpawn 报告的作者、Manifold 的进攻性安全工程师),给出 CVSS 4.0 基础分 7.0,这是唯一带评分的发现;修复落在 1.44.0。Claude Code 的 core.fsmonitor 路径 6 月 26 日报告,当天即被关闭为「更早一份同日报告的重复」,Manifold 称 6 月 29 日发布的 2.1.196 已修复;ultrareview 路径 7 月 15 日报告后被关闭为「内部工单的重复」,但触发它的配置键在未修复期间不予公开,Manifold 只透露它是 core.fsmonitor 之外的另一个同类设置。
Qwen Code 的报告 7 月 7 日提交给阿里的安全响应中心并被接受,修复却没有出现:9 月 1 日复测 0.22.3 仍可触发,9 月 2 日 The Hacker News 通过 npm registry 核验,0.22.3 就是最新发布版本,想靠升级避开的用户没有可升的版本。Grok Build 的处置更早结束:xAI 7 月 1 日把一份更早的同类报告按 informative(信息性)关闭,Manifold 7 月 14 日的报告随后被作为它的重复关闭,9 月 1 日复测 1.0.13 仍可触发。
最没有回音的是 Hermes Agent:Manifold 7 月 19 日在 0.18.2 上确认、次日报告,此后通过 5 个渠道尝试联系 6 次,私有 GHSA(GitHub 安全公告)从未被 triage(分诊处理)。Manifold 称 VulnCheck 以独立 CVE 编号机构(CNA)身份为它分配了 CVE-2026-71963。The Hacker News 在报道中补充:Hermes Agent 7 月曾在一场针对泰国政府网络的入侵中被无人值守地运行。剩余两条线以「重复」收场但都已修复:Cursor 的报告 7 月 8 日提交后被关闭为重复(Manifold 8 月 10 日已单独发文记录 Cursor CLI 的同类问题:仓库提供的 setup 命令在 workspace-trust 提示之前、沙箱之外运行);Codex 的报告 7 月 20 日提交,同样被关闭为重复。
Codex 的 3 个 CVE:公告细节与同类先例
OpenAI 于 9 月 1 日自行发布了 3 个 CVE,覆盖 Codex 的同类问题,发现者来自三个互不相关的研究团队,而 Manifold 自己的 Codex 报告只是又一份撞车。以 为例:该公告 9 月 1 日发布,CVSS v3 评分 7.3(高危),攻击向量为本地(Local)。公告写明,普通 git clone 不会保留源仓库的 .git/config,利用需要仓库带着完整配置被交付或复制。公告描述说,Codex CLI 与 Codex Desktop 收集仓库元数据时没有关闭仓库级的 core.fsmonitor 设置:「该辅助程序在 Codex 的命令沙箱之外、在没有用户审批提示的情况下运行,使攻击者控制的代码得以以用户权限执行。这些代码可以读取、更改或删除用户的文件,并访问用户账户可用的其他资源。」
按 The Hacker News 汇总的受影响范围:Codex CLI 0.102.0~0.130.0 受影响、0.131.0 修复;macOS 桌面版 260202.0859~26.513.31313 受影响、26.519.22136 修复;Windows 桌面版 26.304.38~26.513.40821 受影响、26.519.21041 修复(Microsoft Store 包另有对应修复版本)。
Sonar 在今年 4 月报告过同一个问题点,并指出 Anthropic 为堵住它已经改过一次启动流程:2025 年 11 月 5 日发布的 Claude Code 2.0.34 不再在用户批准信任对话框之前运行 git status,从而缓解了那个具体漏洞,「然而,一个相关问题仍然存在」(Sonar 语)。到 2026 年 6 月 25 日发布的 2.1.193,Manifold 发现同样的启动行为又回来了。再往前,同一类信任对话框绕过在 Visual Studio Code(1.63.1 之前,CVE-2021-43891)与 JetBrains IDE(2021.3.1 之前,CVE-2022-24346)身上都出现过;Anthropic 6 月的安全公告(CVE-2026-55607)也点名了 worktree 操作期间发生的 git fsmonitor 执行。红队公司 Cobalt 在一篇技术文章里把这类攻击概括为:「FSMonitor 滥用利用的是一个合法功能,而不是 bug。它利用 Git 的灵活性与现代 IDE 自动化的交汇,把一次打开仓库的操作变成代码执行。」
CVE-2026-71963 查无记录,Qwen Code 0.22.3 仍是最新版
The Hacker News 9 月 2 日做了几项独立核验:没有任何来源报告这些漏洞被实际利用;CISA 的 KEV 目录(2026.09.01 版,共 1,687 条)没有收录其中任何一个 CVE;Anthropic 已发布的 npm 包安全公告既不覆盖 Claude Code 的 core.fsmonitor 发现、也不覆盖 ultrareview 发现;MITRE 的 CVE 列表里找不到 Hermes 的 CVE-2026-71963,该编号两侧的条目都是已发布的 VulnCheck 记录。
版本层面同样没有变化:npm registry 显示 Qwen Code 0.22.3 仍是最新发布版,Codex CLI 当前版本已是 0.152.1,任何固定在 0.131.0 以下的安装仍然暴露。
自查清单只有三条命令,ultrareview 的键名查不到
对收到过可疑仓库的开发者,检查集中在打开之前:先看 .git/config 里有没有 core.fsmonitor、core.hooksPath、attr.tree(以及 clean/process 过滤器);再对以文件形式到达的仓库运行 git config --get core.fsmonitor;用 git config --global --list | grep fsmonitor 审计全局配置;也可以直接 git config --global core.fsmonitor false 默认关闭该功能。厂商一侧的对策,是把后台上下文调用里的配置剥离掉,例如 git -c core.fsmonitor=false status。Manifold 的提醒更简单:任何「指向程序的设置」都可能被执行,收到文件形式的仓库,先检查 .git/config。
自查覆盖不了全部。触发 claude ultrareview 路径的是另一个同类配置键,Manifold 在它未修复前拒绝公开键名;也没有任何来源说明 2.1.252 之后的版本是否关闭了这条路径——The Hacker News 发稿时,Claude Code 的最新版本为 2.1.258。已知的键可以查,这条路径连该查什么都不知道。