Cursor 那个 193 天没修的零日,我是从一次"手滑"开始复盘的
· 阅读约 5 分钟
上周我打算从 GitHub 上 clone 一个仓库下来跑个 demo,Windows 机器,双击打开项目文件夹,还没来得及看代码,任务栏里突然蹦出来一个计算器窗口。
我当时的第一反应是:我是不是按到什么快捷键了?第二反应是:这个仓库是不是有毒?
结果都没有。我打开 Cursor 的事件日志往回翻了半天,才发现那玩意根本不是"自己弹出来的"——是 Cursor 在打开项目的时候,自动执行了项目根目录里的一个 git.exe。不夸张地说,我盯着那一行日志看了半分钟,脑子是空的。一个 AI 编程环境,你让它打开一个仓库,它不光帮你读代码,还帮你把项目里藏着的二进制文件也顺手启动了。
后来我顺着 Mindgard 那篇博客梳理了一遍,才发现我遇到的这事不新鲜。他们 2025 年 12 月 15 号就把这个漏洞报给 Cursor 了,当天发的官方安全邮箱。漏洞本身是这个逻辑:攻击者在项目根目录放一个伪装成 git.exe 的恶意文件,用户在 Windows 上打开这个仓库时,Cursor 不需要你点任何东西、不需要你确认任何弹窗,它自己就把这个文件执行了。
Mindgard 用的概念验证相当朴素——把 Windows 自带的计算器改名成 git.exe,扔进项目根目录,然后在 Cursor 里打开这个项目。计算结果没有意外:计算器被触发了,而且不是一次。他们测试了好几次,每次打开项目它都会跑一遍,证明这不是偶发的、不是巧合,是可以反复稳定触发的。当时看到这我就明白了,我那天遇到的八成也是同一出戏——有人往仓库里塞了个同名文件,我没注意,Cursor 也没注意,它俩默契地一起把程序给跑了。
你问我当时有没有被吓到?说实话,有点。这个问题的微妙之处在于,Windows 上很多正经开发者都会在项目里放一个 git.exe——可能是某个工具链的一部分,可能是为了固定版本。你没法简单地把"项目里出现这种文件"当作异常信号。攻击者不需要骗你点什么东西,不需要诱导你运行什么命令,在 Cursor 里打开这个仓库就完事了。你甚至可以把恶意代码做得更隐蔽,跑完之后把自己删掉,把原始文件还原回去,事后什么都查不到。
我当然不是第一次在工具信任这件事上缴智商税,所以对这个案例的敏感度比较高。扯远了,回到正题。
Mindgard 报了这个漏洞之后,接下来的流程才是真正让我血压升高的地方。Cursor 这边,第一次回复是 2026 年 1 月 15 号——注意,不是 12 月,是隔了一个月。他们 CISO 的说法是,内部自动化出故障了,HackerOne 的工作流压根没跑起来,所以才手动把 Mindgard 拉进私密漏洞赏金计划。
然后 Mindgard 就去 HackerOne 提交了,结果第二天就被标成"信息性"加"不在范围内"。我不知道你们怎么看这个词,我看到这个词的时候表情基本上是这样的:😅 一个能在打开项目时自动执行任意二进制的漏洞,被标成"信息性"。Mindgard 当然不服,回去质疑了一下,HackerOne 那边倒是还行,重新打开了,也确认复现了。但 Cursor 这边,之后就没有什么实质回应了。
从 2 月到 4 月,Mindgard 中间问了好几次进展,消息发出去,石沉大海。6 月 1 号,Mindgard 通知 HackerOne 说要公开披露,HackerOne 倒是很利索,两天后就给了披露指南。
我算了一下时间线:2025 年 12 月 15 号发现并上报,到 Mindgard 发布博客是 2026 年 7 月 14 号。你自己感受一下,案发到公开整整七个月,中间 Mindgard 报完了、被关了、又被打开了、然后被晾着,最后是靠"我打算公开了"才把流程推到了下一步。而 Cursor 这边呢?这期间发布了至少 197 个新版本,最新测试版里,漏洞还在。
这不是我不给你时间修——你七个月里发了 197 个版本,平均一天多一个,你说你忙,我信。但你要说你完全不知道有这回事,那就说不过去了。
这事儿闹到最后,真正的问题已经不是这个 bug 本身了。一个工具的应急响应流程烂成这样,它以后怎么让用户相信"我发现了问题认真处理"?回头想想,我自己那次打开仓库弹出计算器,当时只觉得是"手滑",现在复盘起来后背有点发凉——如果那次弹出来的不是计算器,而是个能拿到我代码库的东西呢?
写这篇的时候我纠结了一下要不要把重点放在"怎么防"上。后来想想,临时缓解措施这种东西,真的是聊胜于无。官方给的方案是用 AppLocker 或者 Windows App Control 配路径规则,把从工作区目录执行 git.exe 这条路堵死;还有就是别用主系统开不可信仓库,扔隔离虚拟机或者 Windows Sandbox 里。这些招数对个人开发者来说都行,但对于几十上百人的团队,你总不能要求每个人都在沙箱里写代码。
我不知道这个问题的最终解法长什么样,可能是 Cursor 改掉打开项目时过于激进的默认行为,可能是 Windows 那边做更细粒度的可执行文件管控。能确定的只有一件事:下次我再从网上下仓库,第一件事先看一眼根目录里有没有可疑的 git.exe——这大概是我今天唯一能带走的一条规则了。
评论
还没有评论,写下第一条讨论。