打开一个项目就被黑:8个漏洞打穿7款AI编程工具
安全公司 Manifold 发现,AI 编程工具一打开项目就自动跑 git status,而仓库里的 core.fsmonitor 配置可以塞进任意命令。不用你敲提示词,不弹审批框,9月1日复测时还有 4 个漏洞没修。
先说结论:这次不需要你说话
过去两年,所有关于 AI 安全的讨论都围着同一件事转:提示词注入。
套路我们都熟了——有人在网页里、文档里藏一段话,等 AI 读到,它就乖乖照着做。防御思路也很清晰:别让 AI 乱读外部内容,敏感操作要人工确认。
9 月 1 日,安全公司 Manifold Security 披露了一类叫 GitSpawn 的漏洞,直接把这套思路按在地上摩擦。
它不需要你输入任何提示词。不需要你点任何"允许"。在部分工具上,甚至在你登录之前,攻击就已经完成了。
你唯一要做的事,是打开一个项目。

一句 git status,怎么就成了后门
要理解这个漏洞,得先知道 Git 里一个很冷门的设置:core.fsmonitor。
它的本意是给大仓库提速。Git 每次刷新文件索引(比如你敲 git status 或 git diff)时,会去检查一下哪些文件变了。这个设置允许仓库指定一个"助手程序"来干这件事,省得 Git 自己傻乎乎地全盘扫描。
关键在于:这个设置写在仓库自己的 .git/config 文件里。
也就是说,谁控制了仓库,谁就决定了 Git 要运行哪个程序。
这不是 Git 的 bug。Git 老老实实地在设计范围内干活。
问题出在 AI 编程工具身上。Claude Code、Codex、Cursor、Goose、Hermes、Qwen Code、Grok Build——这些命令行 AI 助手有个共同习惯:一进项目就自动跑 git status、git diff 摸清背景,好知道自己在哪、这个工程是什么结构。
于是链路就通了:
你打开项目 → AI 自动跑
git status→ Git 刷新索引 → 读取.git/config里的core.fsmonitor→ 执行攻击者写的命令
以你的权限执行。在 AI 的沙箱外面执行。审批界面上看不见这条记录——因为在 AI 的账本里,它只跑了 git status。

沙箱?那是给自己看的
这事最讽刺的地方在这儿。
各家 AI 编程工具这两年都在拼命宣传自家的沙箱:文件读写被限制在工作区、危险命令要你点头、权限分三档。听起来固若金汤。
但沙箱管的是 AI 自己发出的动作,管不了 Git 这个"被叫来的帮工"。
沙箱里的 AI 说"我执行了 git status",系统觉得没问题。至于 Git 转头又干了什么,沙箱既不知道,也管不着。
打个比方:你给装修队发了张门禁卡,规定他们只能在客厅施工。结果瓦工师傅叫了个外部搬运工,那个搬运工不在你的名单上,却拿着瓦工给的地址,把你全屋的门都开了。
危险的不是 AI 说了什么,是 AI 自己去读了什么。
Manifold 的研究员有一句话很到位:危险的从来不是提示词,而是 AI 为了搞清楚"我在哪"而读取的一切。
顺便说一句,VS Code 在 2021 年就修过同一类问题。五年过去了,几个新玩家显然没翻旧账。
谁修了,谁没修
Manifold 在 9 月 1 日做了一轮复测,八项发现,七款工具。修复情况参差不齐:
| 工具 | 状态 |
|---|---|
| Cursor | 已修 |
| Codex(CLI / 桌面版) | 已修(CVE-2026-19592 / 19593) |
| Goose | 1.44.0 起已修(CVE-2026-72718,CVSS 7.0) |
| Claude Code | 主路径已修;另有一条经 claude ultrareview 的路径仍会触发 |
| Hermes Agent | 未修(CVE-2026-71963),厂商六次联系未回应 |
| Qwen Code | 未修,在你登录之前就会触发 |
| Grok Build | 未修,敲第一个键就触发 |
截至披露时,四项仍未修复。
版本迭代很快,这张表明天可能就变了——以你自己机器上跑的版本为准。
还有个细节值得单独拎出来说。在 Claude Code 和 Hermes 上,恶意命令在你看到"是否信任此工作区"那个弹窗之前就已经跑了。你以为那道弹窗是防线,其实它是马后炮。

三个今天就能做的动作
这漏洞听起来吓人,但传播条件其实挺苛刻:它不能通过普通的 git clone 投递,因为克隆操作不会传输 .git/config。
必须是你拿到了一整个带着 .git 目录的文件夹——同事发的压缩包、网盘同步目录、U 盘拷来的项目、外包交付的源码。
恰恰是日常最常见的交接方式。
所以,三件事:
第一,来历不明的项目包,先查再打开。 终端里跑一句:
grep -i fsmonitor /path/to/repo/.git/config
顺便看看有没有异常的 core.hooksPath。有货,就别用 AI 工具打开它。
第二,别指望全局配置能挡住。 网上流传的 git config --global core.fsmonitor false 不靠谱——仓库自己的配置会覆盖全局设置。真正管用的是厂商侧用 git -c core.fsmonitor=false status 这样的显式参数调用 Git,这件事得他们改。
第三,把你手上的 AI 编程工具升到最新版。 上面那张表里"已修"的几个,升级就能堵住主路径。正在用 Hermes、Qwen Code、Grok Build 的,在厂商补丁落地前,别拿它们开陌生仓库——尤其别在存了生产环境密钥的机器上开。
最后:把「打开」当成「运行」
这事给所有人提了个醒,不管你写不写代码。
我们一直以为"读"是无害的,"运行"才危险。所以看文档没事,双击 exe 才要掂量。
但只要你把活儿交给了 AI,"读"和"运行"之间的那堵墙就塌了。AI 为了读懂一个项目,会顺手把它跑起来。
对程序员来说,结论很硬:克隆一个陌生仓库,从来就更接近运行陌生代码,而不是阅读陌生代码。 把项目丢给 AI,只是把最后那点距离也抹掉了。
对不写代码的人来说,结论更通用:你给 AI 的每一个"自动获取上下文"的权限,都是一张它自己会去用的门禁卡。
AI 越勤快,这张卡被刷的地方就越多。
觉得有用?点个关注,持续获取优质内容。
