Wiz Research 披露 GhostApproval 漏洞,六大 AI 编程助手(Amazon Q、Claude Code、Augment、Cursor 等)存在符号链接攻击风险:对话框显示的是工具调用路径而非文件系统解析后的真实路径,攻击者可诱导用户批准写入 SSH 私钥等敏感文件。
7 月 8 日,Wiz Research 披露了 GhostApproval——一个同时影响六款主流 AI 编程助手的中毒链接(symlink)漏洞:Amazon Q Developer、Claude Code、Augment、Cursor、Google Antigravity 和 Windsurf。这个 Bug 简单到近乎侮辱,这恰恰是它能够得手的原因。
一个仓库附带了一个名为 project_settings.json 的文件。实际上它是一个符号链接,指向你的 SSH 密钥。你让 Agent"设置工作区"。Agent 解析了这个链接,向真实目标写入内容,然后给你展示一个Approval 对话框,上面写的是 project_settings.json——因为这是它被告知的名称,而不是它实际要操作的文件。你点了批准。你在毫不知情的情况下,授权了一次对 ~/.ssh/id_rsa 的写入。
这次披露有三点值得关注。
它显示的是工具调用时所使用的路径,而不是文件系统在解析符号链接之后实际指向的路径。Agent 声称在做的事与文件系统实际执行的操作之间的这道鸿沟,是一类存在了数十年的 Bug——TOCTOU 和符号链接攻击比 LLM 早了三十年——它直接被搬进了 Agent 编程领域,因为没有人把过去的教训迁移过来。
Amazon、Google 和 Cursor 都发布了修复。Augment 和 Windsurf 保持沉默。Anthropic 则反驳说 Claude Code 的行为并非缺陷,理由是:信任一个目录并批准了一项编辑的用户,需要为这个决定负责。这在抽象层面可以自圆其说,但在实践中毫无用处:没有任何人在审阅"设置工作区"请求时会先在脑子里解析一遍符号链接再点同意。要求人类在点击之前先破解攻击者的意图,这不是 consent,而是把责任转移包装成了 consent。
同一周,Cursor 修复了 DuneSlide——两个 CVSS 9.8 的零点击 RCE 漏洞,其中 MCP 响应或搜索结果中被提示注入的指令完全逃逸了沙箱,根本不需要任何 Approval。GhostApproval 和 DuneSlide 以两种不同的方式把信任边界放错了位置。一个依赖人类在时间压力下正确读懂对话框。另一个则直接把人类跳过了。
按操作审批从来不是一种架构。它是一种权宜之计,要求每个人在每次决策时都做出正确的安全判断——而 Agent 生成决策的速度比任何人能审核的速度都快。GhostApproval 就是在 Agent 和你的 SSH 密钥之间,只剩下"你有没有注意到文件名"这道屏障时会发生的事。
真正的修复是在 Agent 运行之前就限定它能触碰的范围,而不是让人在每次操作发生时充当裁判。一份 spec 列出了一个给定任务在范围内允许的路径、操作和目录,就将"人类有没有 catch 到这个"变成了"这本来是不是一次合法操作"。如果 Agent 根本就没被授权去写 /src 以外的地方,你就不需要去识破一个符号链接攻击。写下你的 spec,在事前就定义好爆炸半径。别把这个职责外包给一个没人有时间去验证的对话框。