你 clone 别人的仓库,Cursor 帮你把里面的 exe 跑了

小岛AI 2026 / 07 / 15

先说结论,这事简单到不需要我画什么架构图。

你在 Windows 上用 Cursor 打开一个仓库,只要这个仓库的根目录里躺着一个叫 git.exe 的文件,Cursor 就会自动把它跑起来。没有弹窗,没有确认框,没有那种「是否信任此工作区作者」的黄条,什么都没有。文件就那么执行了。

安全公司 Mindgard 为了证明这不是纸上谈兵,用了一个特无害的演示,把 Windows 自带的计算器改个名叫 git.exe,扔进仓库根目录,然后拿 Cursor 打开这个仓库。结果计算器自己弹出来了。而且不是弹一次,是屏幕上啪啪啪冒出来一堆计算器窗口,你开着这个项目它就一直在后台重复地跑那个 exe。

Mindgard 的 PoC 截图:任务管理器里 Cursor 悄悄拉起了 15 个计算器进程,右边一堆计算器窗口自己层叠着弹出来,全程没人点过一下

换成真实攻击场景,你把计算器换成别的东西就行。任意代码执行,以当前用户的权限。

好家伙,我看到这段的时候是有点恍惚的。这年头聊 AI 安全,大家张口就是 prompt 注入、模型越狱、jailbreak、记忆投毒,一个比一个玄乎。结果 Cursor 这个洞,跟这些一点关系没有。它朴素得离谱,就是往目录里放个同名 exe,等你开门。

洞在哪,为啥是「设计」而不是「bug」

技术细节 Mindgard 也没藏着,就一句话的事。

Cursor 加载一个项目的时候,要去找 Git 的可执行文件在哪。它会在好几个位置挨个搜,而其中一个被搜的位置,就是你正打开的这个工作区本身。

于是逻辑就通了。如果攻击者提前在仓库根目录塞了个恶意的 git.exe,Cursor 在做路径解析、准备调 git 的时候,一搜搜到了你仓库里这个,直接就执行了。它压根不觉得这有什么问题,因为在它眼里这就是「找到了 git,调用它」这么个再正常不过的操作。

我盯着 Mindgard 贴的那条 Sysinternals 进程监控日志看了半天。

Cursor.exe → Process Create → ...\test_repos\git_exec0001\git.exe
Command line: git rev-parse --show-toplevel

git rev-parse --show-toplevel,这是个特别日常的命令,就是问一句「当前仓库的根目录在哪」。几乎所有带 git 集成的编辑器打开项目时都会跑一下。问题在于,Cursor 跑这句的时候,它去调的那个 git,是从你仓库里就地捞出来的。

这就是我想跟你唠的那个点。这不是一段写错的代码,不是数组越界不是空指针。这是一个「设计决策」。为了让你 clone 完仓库、双击打开、马上就能用,编辑器得足够聪明地自己去把工具链凑齐,包括在离你最近的地方找 git。开箱即用、零配置、丝滑,这些我们天天挂在嘴边夸产品的词,翻过来就是它主动扩大了自己会去执行东西的范围。

便利本身就是攻击面。你享受的每一分「它怎么这么懂我、什么都不用配」,背后都是它替你做了一堆你没看见的决定,而其中任何一个决定,都可能是别人给你挖的坑。

编辑器伸手进你的仓库找 git,捡起来的却是一个伪装成扳手的木马,然后就地点火

我们到底给了这些 AI 工具多大的权

顺着这个往下想,我后背有点发凉的其实不是这一个 exe。

你回想一下现在装在你机器上的这堆东西。Cursor、Claude Code、Codex、各种 IDE 插件。它们要读你全部的源码,要访问你的终端,能帮你跑命令,能改文件,越来越多的还能「自主」地连着干好几步不用你点头。我们把这些权限给出去的时候,心里想的是「它能帮我省时间」。

Mindgard 那篇 blog 里有句话我觉得说得挺重。行业一直在讲,这些系统值得信任,因为它们让你更高效。但历史一次次告诉我们,不能因为一个东西有用就信任它。信任得靠行为挣来。

而 Cursor 值多少钱呢。7 百万活跃用户,1 百万日活,1 百万付费,5 万家公司在用,外面传的估值 6 百亿美元。你会默认这种体量的公司,总归对安全是有点敬畏的吧。这个洞告诉你,不一定。

Cursor 现在能碰到的东西,是你的源代码、你的密钥、你的公司专有资产,加上越来越强的自动执行能力。你把生产环境的软件、把这些家底,交给它了。那它至少得对得起这份托付。托付是要有人负责的,负责是要有人回话的。

报了七个月,厂商一个字没回

这才是整件事里最魔幻的部分。

Mindgard 2025 年 12 月 15 号发现这个洞,当天就报给了 Cursor 官方 security.txt 里写的那个安全邮箱。没回音。追了一次,还是没回音。后来实在联系不上,跑去 LinkedIn 公开发帖找人,才总算把 Cursor 的 CISO 炸出来,对方说是内部一个自动化流程挂了,本来该把他们拉进 HackerOne 私有赏金项目的,手动补拉了一下。

进了 HackerOne 之后呢。报告先被标成「仅供参考、不在范围内」直接关了。Mindgard 提出异议,HackerOne 重新复现,确认了问题真实存在,也确认细节已经转达给 Cursor。然后,就没有然后了。

我把那张时间线表从头看到尾,2 月催更没回,3 月催更没回,直接找 CISO 也没回,4 月催更还是没回。就这么一个月一个月过去,没有任何迹象表明修复动工了、工程团队在查了、或者受影响的用户会被告知风险。而与此同时,Cursor 在干嘛,在正常发版。七个月里 197 个以上的新版本、70 多个 release,功能一个接一个发,公告一条接一条出,平台一路狂奔,唯独这个洞一直在那待着,你怎么催都问不出个进度。

到某个点,对话的性质就变了。它不再是一次漏洞披露,而是一个更让人不舒服的问题,你们这套安全流程,到底是拿来干嘛的。

「完全披露」是核按钮,不到万不得已不按

这里得解释一下 Mindgard 最后做的事,在安全圈叫 full disclosure,完全披露,把漏洞的全部细节直接公开。

正常的漏洞披露叫协同披露,套路是固定的,研究者报告,厂商对话,评估严重性,工程团队排查,做出补丁,保护用户,最后才公开。这套之所以能转,是因为所有人有个共同目标,降低风险。

而完全披露,是这套流程彻底失效之后的最后手段。它是核选项。当厂商不再回话、还在继续分发受影响的软件,研究者就被逼到一个特别难受的岔路口,要么继续闭嘴,让用户在「我很安全」的幻觉里裸奔;要么把洞捅出去,让大家至少能自己判断风险、做点防护。

Mindgard 选了后者。用他们自己的话说,协同披露的前提是得有协同。七个月了,没有任何迹象表明用户在被保护、修复在推进、受影响的组织被通知了。到这份上,继续捂着信息,保护的不是用户,是沉默。

我是真的挺认同这个判断的。安全行业花了快二十年劝研究者走协同披露的正规渠道,但这条渠道能转,靠的是厂商那头有人接、有能力评估、愿意行动。现在 AI 产品井喷,安全发现的数量暴涨,而且很多是全新的、塞不进传统漏洞分类的东西。厂商那套二十年的分诊流程,正在肉眼可见地被冲垮。如果披露管道真的堵了,行业该老实承认,而不是让研究者、客户、用户一起在黑暗里等。

那你今天能做点啥

吐槽归吐槽,回到咱们自己身上,这个洞你现在就能防,我把 Mindgard 给的缓解措施翻译成人话。

如果你是个人开发者,在补丁出来之前,别拿主力机直接打开来路不明的仓库。你要看陌生仓库,扔进一个隔离环境里,Windows Sandbox、一次性的虚拟机、随便什么用完就扔的沙箱都行。特别注意,别指望靠文件哈希黑名单来防,攻击者塞的那个 exe,哈希随便变,你拉黑一个它换一个。

如果你管着公司里一堆 Windows 机器,可以用 AppLocker 或者 Windows App Control 策略,禁止从开发者工作区目录里执行那个可执行文件名。规则要按路径来写,scope 到仓库和工作区根目录,像 %USERPROFILE%\source\repos\*\filename.exe 这样,别用哈希规则,原因同上。

再往上一层,如果你想做到「只有当某个特定父进程去启动这个子 exe 时才拦」,Windows 自己没这种内置能力,一般得靠 EDR 或者专门的终端安全产品才做得到。

但说实话,这些都是给你续命的临时措施。真正该把洞堵上的,是 Cursor。而这恰恰是最让人无力的地方,一个复现起来毫不费劲、影响却是任意代码执行的洞,在厂商手里躺了七个月。

写在最后

我一直觉得,一个工具值不值得托付,不看它 demo 有多惊艳,看它出事的时候怎么接招。

Cursor 这事,漏洞本身不算什么,朴素得都有点无聊。真正扎心的是那张时间线,是七个月里一次又一次的「无回应」。信任这东西,建起来要很久,塌下去只需要一句「我们已多次联系厂商,但未收到任何回复」。

我们这代人正把越来越多的家底,交给这些跑在自己机器上、读得到一切、还越来越能自己动手的 AI 工具。它们确实好用,好用到让人忘了问一句,万一它替我做的那个决定,是错的呢,是别人给我下的套呢。

万能青年旅店有句词,是谁来自山川湖海,却囿于昼夜厨房与爱。我们这些人来自代码的山川湖海,天天跟最前沿的模型打交道,最后可能栽在一个改了名的计算器上。

信任要靠行为一点点挣,不是靠估值,不是靠周活,更不是靠一句「开箱即用」。

屏幕前的你,下次 clone 一个陌生仓库、随手用 IDE 打开之前,可以先停半秒。就半秒。