深海军蓝底色上的抽象技术插图:一块高大的半透明边界平面立于左边缘附近,以细浅色轮廓绘制,并带有磨砂填充。一条白线从左侧进入,穿过该平面后继续向右,最终终止于一个深色小块,该小块位于一排浅浅的四个发光青色模块之外。一条细虚线白色轨迹在即将到达平面之前从白线分出,止于平面表面安装的一个浅色小矩形,仅凭形状即可辨识。画面中不出现文字、人物或组织标志。OrcaRouter 标志合成在右下角。
AI Safety Incidents

GhostApproval:六个 AI 编程助手在请求权限时指错了文件

作者

Gideon Frost

发布日期

最新模型 · 20查看全部模型 →
基准测试:Artificial Analysis · 每日更新
返回全部文章

2026年7月8日,安全公司Wiz发布了一项名为GhostApproval的研究发现:在代码仓库中植入的一个符号链接,使六款AI编程助手将文件写入其工作区之外——写入 ~/.ssh/authorized_keys,该文件可授予持久的免密码SSH访问权限,或写入 ~/.zshrc,该文件会在下次启动shell时运行——而确认对话框只标明了该链接所伪装成的那个无害文件。Wiz测试了Amazon Q Developer、Anthropic的Claude Code、Augment、Cursor、Google Antigravity和Windsurf,并报告这六款产品均存在该模式。尚未有在野利用的报告:这项工作是一次概念验证演示,档案条目也未记录任何实际危害。三家厂商发布了修复程序,两家厂商确认了该报告,随后不再回复,还有一家厂商则否认该行为属于漏洞。该Orca AI Incident Archive 保存了关于此发现的完整记录,以及归入其SANDBOX类型标签下的其他条目。

这一原语本身早已不新鲜。符号链接跟随被归类为 CWE-61,几十年来一直是一种攻击原语——Wiz 列出了其在竞争条件、包管理器和容器逃逸中的较早用法——而其中每一种都依赖于某个工具在未先解析路径的情况下写入用户可控路径。让这一发现值得命名的,是第二层问题:在若干产品中,助手自身的推理识别出了危险的目标位置,而展示给人类的提示却将其隐藏了。Wiz 将其归档为 CWE-451,即关键信息的用户界面误述。安全边界是存在的。但一个人行使它所需的信息却不存在。

这个把戏是如何运作的,以及它最终落在什么上

Wiz 的恶意仓库故意做得很无聊。它包含一个名为 project_settings.json 的符号链接,该链接指向开发者的 SSH 授权密钥文件,另外还有一个 README,指示智能体在设置工作区时更新那个“配置”。当开发者要求助手按照 README 操作时,智能体会跟随该链接并写入攻击者的公钥。如果这台机器运行着攻击者能够访问的 SSH 服务,那么从此以后就是免密码登录。第二种变体将同一个诱饵指向 ~/.zshrc,因此下次打开终端时载荷就会执行,完全不需要 SSH 访问权限。

Wiz 对这次技术故障的描述很简短:沙盒(在存在沙盒的情况下)并不会校验规范路径,因此,一次本应落在项目内部的写入操作,最终却落到了链接所指向的任何位置。该公司用自己的话表示,其概念验证已在“6 款顶级 AI 编程助手”上复现了这一问题,并为每一款都发布了截图。受影响的人群是任何在那些工具中打开并非自己所编写的仓库的人——而在正常的开发者工作流程中,这包括分叉项目、第三方依赖,以及对外部贡献者分支的任何代码审查。

命名了错误文件的对话框

最清晰的证据来自 Claude Code。在 Wiz 的测试中,该智能体的推理过程写道(按该公司的引述):“我可以看到 project_settings.json 实际上是一个 zsh 配置文件。”用户看到的权限提示则问道:“是否要对 project_settings.json 进行此项编辑?”该智能体知道写入操作将要到哪里;而授权这次操作的人却不知道。Wiz 称由此产生的同意“实质上是空洞的”,并将这种人在回路检查称为橡皮图章。

有三款产品让这个差距比一个错误的标签更严重。Windsurf 将文件写入磁盘先于Accept 和 Reject 按钮出现,因此该对话框只是一个撤销选项,而不是授权关卡——Wiz 表示,等到用户能够拒绝时,密钥早已就位。Amazon Q Developer 也表现出相同的先后顺序,在写入后只提供一个 Undo 按钮。Augment 则什么都没问:Wiz 演示了一次符号链接读取,在聊天记录中暴露了一个来自项目外部的诱饵 AWS 凭据文件;以及一次指向 ~/.ssh/authorized_keys 的符号链接写入,完全没有任何对话框。在另一端,Cursor 和 Google Antigravity 显示了未解析的路径,并要求用户点击以授权已解析的路径。

Wiz 的首次测试于 2026 年 2 月 10 日进行,报告在 2 月 12 日至 3 月 5 日之间发出。其披露时间线记录了各方的确认:Anthropic 于 2 月 15 日、Augment 于 2 月 24 日、Google 于 2 月 26 日、Cursor 于 3 月 2 日、AWS 于 3 月 6 日,以及拥有 Windsurf 的 Cognition 于 6 月 23 日。公开披露在首份报告之后大约五个月进行。

HTML card headed 'Five months from first test to public disclosure', with a kicker reading 'GhostApproval · Wiz Research · disclosure sequence'. A vertical timeline lists the dated steps: 10 February 2026, initial discovery; 12 and 14 February, Augment read and write reports; 14 February, report to Anthropic; 15 February, Anthropic closes the ticket as Informative; 24 February, Augment acknowledges; 26 February, Google acknowledges; 2 March, Cursor acknowledges; 2 and 5 March, reports to Cognition and AWS; 22 May, Google deploys its fix; 27 May, AWS ships language server 1.69.0; 23 June, AWS publishes CVE-2026-12958 and Cognition acknowledges; 8 July 2026, public disclosure. An amber box records that Augment and Windsurf acknowledged receipt and supplied no further updates. A footer cites Wiz's disclosure timeline. The OrcaRouter logo is composited in the bottom-right corner.

六家供应商,三种答案

{{1}}Wiz 按自身的严重性等级对这些发现进行评级,从 AWS 的“高”到 Augment、Cursor、Google Antigravity 和 Windsurf 的“严重”。{{/1}} {{2}}三家供应商将该报告视为漏洞并发布了修复程序。{{/2}} {{3}}该档案将该条目评为高严重性、置信度 A,且主要公告在机制上与 Wiz 一致。{{/3}}

• Amazon Web Services高危,编号为 CVE-2026-12958,已在 Language Servers for AWS 1.69.0 中修复。AWS 于 2026 年 6 月 23 日发布的官方公告 2026-047-AWS 确认,1.69.0 之前存在"符号链接校验缺失问题",并列出了包含该修复的最低插件版本:Amazon Q Developer for Visual Studio Code 2.20、for JetBrains 4.3、for Eclipse 2.7.4,以及 AWS Toolkit with Amazon Q for Visual Studio 1.94.0.0。公告称目前没有变通方案,除非网络配置阻止更新,否则语言服务器会自动更新;公告还对 Wiz 的协同披露表示感谢。CNA 记录依据 CVSS 4.0 给出 8.5 分,依据 CVSS 3.1 给出 7.8 分。

• Cursor。严重,编号为 CVE-2026-50549,已在 Cursor 3.0 中修复。该记录由 GitHub 作为 CNA 于 2026 年 6 月 25 日发布,在 CVSS 4.0 下评分为 9.3。其描述对攻击者的刻画与 Wiz 的仓库事件略有不同:恶意智能体会在工作区内创建符号链接,并迫使路径规范化失败,原因可能是目标不存在,或路径的读取权限被移除;此后,写入会在未经批准的情况下回退到原始路径,并可能覆盖沙箱辅助程序,以实现非沙箱执行。

• Google。Wiz 将 Antigravity 评为“严重”级别,并将该修复记录为版本 1.19.6,于 2026 年 5 月 22 日部署。其严重性一栏显示为“待定”,而据 Wiz 的说法,Google 当时正在评估是否发布 CVE;在公开记录中,并未出现 Antigravity 的 CVE 编号。

• Augment。按 Wiz 的评级为“严重”,已在 0.754.3 上完成测试,于 2026 年 2 月 24 日获确认,发布时仍未修补。云安全联盟(Cloud Security Alliance)就该发现发布的研究报告记录了 Augment 的反驳意见,即智能体是在用户自己的凭据下运行的。

• Windsurf。按 Wiz 的评级为严重级别,在版本 V1.9566 上测试,Cognition 于 2026 年 6 月 23 日确认,发布时仍未修补。

• Anthropic。存在争议。无 CVE,且 Claude Code 的测试版本 2.1.42 在 Wiz 的表格中状态为“已拒绝”。

HTML card headed 'One pattern, six products, six answers', with a kicker reading 'GhostApproval · vendor status at public disclosure, 8 July 2026'. A six-row table gives product, Wiz's severity rating, CVE identifier, fixed version and status: Amazon Q Developer, High, CVE-2026-12958, fixed in language server 1.69.0; Cursor, Critical, CVE-2026-50549, fixed in 3.0; Google Antigravity, Critical, no CVE published, fixed in 1.19.6 on 22 May 2026; Augment, Critical, no CVE, no fix, acknowledged 24 February 2026; Windsurf, Critical, no CVE, no fix, acknowledged 23 June 2026; Claude Code from Anthropic, Disputed, no CVE, rejected as outside the threat model. A note beneath reads that severity ratings for the products without a CVE are Wiz's own, not a CNA score, and that no exploitation in the wild was reported. A footer cites Wiz's vendor table, the AWS security bulletin and the two CVE records. The OrcaRouter logo is composited in the bottom-right corner.

Anthropic 的拒绝,以及早于报告就已存在的修复方案

Anthropic 对 Wiz 的答复是经过深思熟虑的拒绝。根据 Wiz 的引述,该公司写道:“这超出了我们当前的威胁模型。当用户首次在某个目录中启动 Claude Code 时,必须先确认自己信任该目录,然后才能开始会话。你所描述的场景涉及用户在包含恶意符号链接的目录中明确确认权限提示,这超出了 Claude Code 的威胁模型。”该工单以“Informative”状态关闭。

这种推理有一个连贯的结构:用户信任该目录,随后批准了该操作,因此两个同意时刻都得到了尊重。Wiz 的反驳是,知情同意需要准确的信息——批准 project_settings.json,而实际写入落在 ~/.ssh/authorized_keys,这形式上是一个决定,实质上却是一个空洞的决定。Wiz 并未声称已经断定哪种立场正确,本文也没有。实际的观察是,AWS、Google 和 Cursor 采取了另一种观点并打了补丁。

Wiz还报告称,Claude Code在这场争议的背后已经发生了变化:该公司写道,当前版本会解析符号链接,并在写入敏感文件前发出警告;它还指出,Anthropic拒绝说明这是否与该报告有关。2026年7月7日,Anthropic提供了一处更正,Wiz引述如下:“Edit/Write权限对话框中的符号链接警告随v2.1.32(2026年2月5日)发布,比这份报告提交给我们早了九天。它是在内部审查基础上开展的主动安全加固工作的一部分。拒绝置评是我们分诊系统的自动回复。”

版本时间对得上;但关于究竟改了什么,公开记录却对不上。Claude Code 2.1.32 于 2026 年 2 月 5 日 17:03 UTC 发布到 npm 注册表,比 2 月 14 日的报告早九天,与 Anthropic 的说法完全一致。但该版本的公开更新日志条目列出了十二项变更,包括智能体团队、记忆记录和若干 UI 修复,其中没有一项提到符号链接或权限对话框。最早描述这一确切行为的更新日志条目要晚得多:2026 年 9 月 22 日发布到 npm 的 2.1.280 版记载“修复了通过符号链接路径进行的写入会按其树内拼写来判断的问题:提示中会指明写入实际落在何处”,2026 年 10 月 1 日的 2.1.287 版则记载,通过仓库中已提交的符号链接对敏感文件进行 shell 写入时,现在会指明写入落点,并等待人工处理。Wiz 自己观察到 2.1.173 及之后版本会解析符号链接,这一观察也同样发生在报告之后,因为 2.1.173 于 2026 年 6 月 11 日发布。

什么是已确立的,什么不是

• 已确认。其机制是:仓库中的一个诱饵符号链接、一个跟随它的智能体、一次落在工作区之外的写入,以及一个会指向错误路径的确认界面。Wiz 在全部六款产品中复现了该问题,并公布了截图。存在两条 CVE 记录,且已由其各自的 CNA 发布;AWS 的公告独立证实了低于 1.69.0 的漏洞及相应修复。Anthropic 不否认该行为已经发生,但否认这构成漏洞。

• 单一来源。 Augment、Windsurf 和 Google Antigravity 的严重性评级是 Wiz 的判断,而非 CNA 评分,因为这三者均未发布 CVE。关于 Windsurf 和 Amazon Q 在对话框出现之前写入的说法,依据的是 Wiz 的截图和叙述;没有厂商公开确认这一顺序。

• 有争议。一款工具是否负有义务保护其用户免受欺骗性工作区的侵害,抑或目录信任加上一次点击便足以了结此问题。Anthropic 认为是后者;Wiz 则认为它所展示的提示令这次点击变得毫无意义。档案并未将该记录标记为有争议:事实层面各方并无分歧,只有解读存在争议。

• 尚未确定。自文章发表以来,Augment 和 Windsurf 是否已修复该漏洞。本文所查阅的所有报道,包括云安全联盟(Cloud Security Alliance)于 2026 年 7 月 15 日发布的说明,仍将两者描述为未修补;未发现任一供应商发布公开的修复通知。

日期本身有个小问题。Wiz 的帖子及其披露时间线都给出 2026 年 7 月 8 日,Infosecurity Magazine 称该概念验证发布于 7 月 7 日,而其自己的报道是在 7 月 9 日,档案条目的日期为 2026 年 7 月 9 日,精确到日。该发现、相关报道和档案在周上没有分歧;它们在日上最多相差两天。

针对这六项之一的早期工作应单独记功。CSO Online 的 Evan Schuman 于 2026 年 7 月 9 日撰文指出,Cato Networks 曾在 Wiz 更广泛的研究之前报告过该漏洞的一个仅影响 Cursor 的版本。SecurityWeek 于 2026 年 7 月 3 日发表的对该研究的报道将其命名为 DuneSlide,将 CVE-2026-50548 和 CVE-2026-50549 分配给这对漏洞,给两者的评分均为 9.8,并把修复它们的 Cursor 3.0 版本发布日期定在 4 月 2 日——这些数字与 Wiz 的时间线不符:后者将 Cursor 修复的公布时间定在 6 月 5 日;也与 6 月 25 日发布、评分为 9.3 的 CNA 记录不符。9.8 和 9.3 是同一漏洞的两个评分方给出的评分;4 月和 6 月的日期可能分别描述的是一次版本发布和一份安全公告,而不是在补丁何时发布上存在分歧。

之后发生了什么变化

具体来说,Amazon Q Developer 用户被迁移到了语言服务器 1.69.0,在大多数配置中为自动迁移;Google Antigravity 用户从 2026 年 5 月 22 日起迁移到 1.19.6;Cursor 用户迁移到 3.0;Claude Code 用户则迁移到一个可解析链接的版本,进一步的提示保真度变更将在 2026 年 9 月和 10 月期间随 2.1.280 和 2.1.287 发布。根据发布时可获得的证据,Augment 和 Windsurf 用户只得到了一个值得关注的日期,除此之外别无其他。

Wiz 自身的建议范围较窄且偏技术性:在显示提示前解析符号链接,当解析后的路径落在工作区之外时明确发出警告,并且未经明确授权绝不写入磁盘,从而使该对话框成为一道闸门,而不是撤销按钮。云安全联盟的说明补充了治理层面的框架——将编码助手视为具有文件系统访问权限的特权软件,而不是编辑器插件,并直接询问供应商在显示确认之前是否会解析路径。IDC 的 Katie Norton 在 CSO Online 的引述中,将残余风险归位于供应链本就存在的地方:外部贡献者、分叉仓库和第三方依赖,“而不是内部编写的代码”。

仍未解决的是设计问题,而不是缺陷。六个独立构建的产品都收敛到同一套顺序——展示所请求的路径,信任点击——而其后的分歧关乎责任归属,而非机制。归档条目带有一个里程碑标记,这代表归档的判断:该记录描述的是一类问题,而不是某个单一厂商的失误;这种解读很难反驳:同一个简短的概念验证成功了六次。

Abstract technical illustration on a dark navy field: a pale translucent check mark, drawn as a thin outline, floats above a small white rectangle that represents an approval surface. Beneath the rectangle a white line drops vertically, passes through a faint horizontal plane, and emerges on the other side pointing at a second dark rectangle that is drawn only as an outline, unlit. A soft amber glow marks the point where the line crosses the plane. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.