GhostApproval:编程智能体的批准弹窗隐藏了真正的写入目标
Wiz Research 于 2026 年 7 月 8 日披露六款 AI 编程助手中的信任边界缺陷:恶意仓库借助符号链接,使一次被批准的编辑悄悄写入 ~/.ssh/authorized_keys。
这是什么?
2026 年 7 月 8 日,Wiz Research 发布了 GhostApproval,这是一个存在于六款最主流 AI 编程助手中的系统性信任边界缺陷:Amazon Q Developer、Anthropic Claude Code、Augment、Cursor、Google Antigravity 与 Windsurf。这是一份防御性披露——在发布前已通报全部六家厂商——它记录的是整类工具的共同盲区,而非针对某个产品的新型攻击。
核心问题并不新奇。它把一个已存在数十年的原语——符号链接跟随(CWE-61)——与一个更新、更值得关注的现象结合起来:这些智能体弹出的确认对话框,并未显示写入操作实际会落到哪里。理论上人类”在回路之中”,但这个回路被喂入了误导性的信息。
工作原理
恶意仓库中包含一个看似普通的文件,例如 project_settings.json,它实际上是一个指向工作区之外的符号链接——指向 ~/.ssh/authorized_keys、~/.zshrc 或其他敏感目标。仓库的 README 里写有明文指令,如”要配置本项目,请用以下内容更新 project_settings.json”,并附上攻击者提供的 SSH 公钥。
当开发者克隆仓库并要求助手”配置工作区”或”按照 README 操作”时,智能体读取指令并写入 project_settings.json。由于工具从不将符号链接解析为规范路径,写入便落到了真正的目标上。攻击者的密钥被追加进 authorized_keys,从而获得持久、免密码的远程访问——这正是”混淆代理人”模式被套用到一个自主写文件的程序上。
第二个更尖锐的失效是界面信息误导(CWE-451)。Wiz 观察到,多个智能体的内部推理明确识别出了危险——其中一个指出该文件”实际上是一个 zsh 配置文件”——而向用户展示的对话框却只问”是否对 project_settings.json 应用此次编辑?“。智能体知情,用户却被蒙在鼓里。这就把一道沙箱检查变成了知情同意的绕过:同意在形式上存在,实质上却是空的。
Wiz 在六款工具上都发现了变体。有些(Amazon Q Developer、Windsurf)在批准按钮出现之前就已写入磁盘,使对话框沦为”撤销”而非”关卡”。Augment 既执行符号链接读取——在聊天中显示工作区之外某文件的内容——也在毫无确认的情况下执行写入。概念验证只需两行命令搭建一个仓库:滥用门槛不过是一个 pull request 或一个依赖,而非高深技能。
为何重要
“人在回路”是自主编程智能体最主要的安全叙事,而 GhostApproval 表明:当回路缺乏可靠信息时,这一叙事会何等脆弱。该议题与更早的批准/符号链接研究(如 SymJack)相关,但本次的重点在于信任边界与知情同意:安全控制确实存在,却没有把用户做决定所需的信息呈现出来。
厂商的回应出现了分化,这本身就很有启发。Google、AWS 与 Cursor 将其视为漏洞并发布了修复。Anthropic 则不认同 Claude Code 的行为属于缺陷,主张:信任某目录并批准某次编辑的用户,应对该决定负责——将”欺骗性目录”这一情形置于其威胁模型之外(Anthropic 另指出,符号链接告警在更早的加固版本中已经存在)。这一分歧是一个真正的设计哲学问题:工具应当保护用户免受被刻意设计来欺骗他们的工作区之害,还是识别恶意仓库属于用户自己的责任?对于在不可信第三方代码上运行智能体的开发者——恰恰是这些工具主打的用途——无论界线划在哪里,务实的答案都应保持防御姿态。这与过度积极的智能体问题是同一课:没有忠实控制面的能力,就是隐患。
防御措施
在弹出提示前先解析符号链接。 Wiz 建议的修复是将目标路径规范化,并在对话框中显示已解析的目的地。写入 ~/.ssh/authorized_keys 绝不应显示为对 ./config.json 的编辑。
让对话框成为关卡,而非撤销键。 在明确授权之前绝不写入磁盘。授权前写入会彻底架空人工监督——当你点击时,损害已经发生。
对任何工作区之外的写入告警。 将规范路径逸出项目根目录的写入视为高风险,并要求一次点名真实文件的、显式而强化的确认。
隔离不可信仓库并关闭自动批准。 在隔离环境中对未知代码运行智能体,并为第三方项目关闭自动批准模式。更新已发布修复的工具(Amazon Q Developer、Cursor、Google Antigravity);对其余工具,应假定该行为仍然存在。
监控敏感落点。 对 ~/.ssh/authorized_keys、shell 的 rc 文件及其他持久化路径的修改发出告警——尤其当写入进程是一个正在处理刚克隆仓库的 AI 编程助手时。
状态
| 厂商 / 工具 | 状态 | 参考 |
|---|---|---|
| Amazon Q Developer | 已修复(language server 1.69.0) | CVE-2026-12958(AWS 公告) |
| Cursor | 已修复(v3.0) | CVE-2026-50549(Cursor 公告) |
| Google Antigravity | 已修复;CVE 评估进行中 | — |
| Augment | 已确认收到,披露时尚无修复 | — |
| Windsurf | 已确认收到,披露时尚无修复 | — |
| Anthropic Claude Code | 有异议(“在威胁模型之外”);早期版本已注明符号链接告警 | — |
| 披露 | 2026 年 2 月 10 日发现;2026 年 7 月 8 日公开(Wiz Research) | — |
Sources
- → https://www.wiz.io/blog/ghostapproval-a-trust-boundary-gap-in-ai-coding-assistants
- → https://threat-modeling.com/ghostapproval-symlink-ai-coding-assistants-amazon-q-claude-code-cursor/
- → https://github.com/cursor/cursor/security/advisories/GHSA-3v8f-48vw-3mjx
- → https://github.com/aws/language-servers/security/advisories/GHSA-6v3r-4p5c-mrp5
- → https://cwe.mitre.org/data/definitions/451.html