老魏 · 折腾铺
民宿站监控台双色球点哪抠哪老照片修复Murdoku科学探险家
折腾铺/单篇
单篇2026-09-08老魏

打开一个项目就被黑:8个漏洞打穿7款AI编程工具

安全公司 Manifold 发现,AI 编程工具一打开项目就自动跑 git status,而仓库里的 core.fsmonitor 配置可以塞进任意命令。不用你敲提示词,不弹审批框,9月1日复测时还有 4 个漏洞没修。
打开一个项目就被黑:8个漏洞打穿7款AI编程工具

打开一个项目就被黑: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 越勤快,这张卡被刷的地方就越多。


觉得有用?点个关注,持续获取优质内容。