GhostApproval 符号链接漏洞可让恶意代码库在 AI 编程代理中执行代码
导语:Wiz 安全研究人员披露了一种名为 GhostApproval 的新型攻击模式,利用 AI 编程助手未能正确处理符号链接(symlink)的缺陷,使恶意代码仓库能够通过伪装成无害文件编辑的方式,将攻击者的 SSH 公钥或 shell 启动命令写入开发者的敏感文件,从而实现远程登录或命令执行。受影响的六款工具中,三家已发布修复,两家正在修复中,Anthropic 则对该分类提出异议。
GhostApproval 符号链接漏洞可让恶意代码库在 AI 编程代理中执行代码
Wiz 的研究人员发现,六款主流 AI 编程助手存在一项缺陷,可让一个被植入陷阱的代码项目悄悄接管开发者的电脑。助手会请求编辑一个看似无害的文件,但写入操作实际上落在了敏感文件上。受影响的工具包括 Amazon Q Developer、Anthropic 的 Claude Code、Augment、Cursor、Google Antigravity 以及 Windsurf。Wiz 将这种攻击模式命名为 GhostApproval,并于 7 月 8 日公开披露。
该攻击利用了一项古老的 Unix 功能——符号链接(symlink),而这些 AI 助手未能对其进行检测。符号链接会悄悄指向磁盘上其他位置的文件,因此对符号链接的写入实际上是写入了其指向的目标文件。六款工具中,有三款已发布修复,两款尚未修复,Anthropic 则否认这是一个缺陷。其中风险最大的是那些在用户来不及审查之前就已修改文件的工具。
Wiz 构建了一个包含名为 `project_settings.json` 的符号链接的恶意代码仓库,该符号链接实际上指向受害者的 SSH 登录文件 `~/.ssh/authorized_keys`。仓库的 README 指示助手向 `project_settings.json` 中"添加一行内容",而这行内容正是攻击者自己的 SSH 公钥,被伪装成一项无害的设置。让代理执行"设置工作区"或"按照 README 操作"等指令,它就会通过符号链接将该密钥直接写入登录文件。此后,如果目标机器运行着攻击者可以访问的 SSH 服务,攻击者就可以无密码登录。该攻击还有第二种变体,它会向用户的 shell 启动文件 `~/.zshrc` 写入内容,shell 在用户下次打开终端时会执行该文件,因此无需 SSH 服务即可入侵。目前没有任何迹象表明这些手法已被用于真实攻击,Wiz 将其作为研究成果发布。

符号链接攻击手法本身已存在数十年。符号链接仅仅是投递手段,真正的失败在于那个批准对话框。在 GhostApproval 中,这个对话框在说谎。在对 Claude Code 进行测试时,Wiz 发现该代理在自己的推理过程中已经识别出了真正的目标,其原话是 `project_settings.json`"实际上是一个 zsh 配置文件"。然而展示给开发者的对话框中只显示了那个无害的文件名。用户点击"接受",以为自己是在编辑一个本地配置文件,但写入操作却命中了 shell 启动文件或 SSH 密钥。Wiz 将此称为"知情同意绕过"(informed-consent bypass):人类仍然在审批环节中,但该环节展示给他们的是错误的信息。
部分工具的情况更为糟糕:它们直接跳过了这一关卡,根本没有给用户介入的机会。Windsurf 在"接受"和"拒绝"按钮出现之前就已将文件写入磁盘,因此该提示仅仅是一个撤销按钮,而密钥此时已经写入完成。Augment 则根本不显示对话框,Wiz 演示了它静默读取项目之外的 AWS 凭据文件的行为。即便仍然显示提示的工具也并不更安全;只不过提示中显示了错误的文件名。
Wiz 已向全部六家厂商报告了该问题。在各方回应中,Anthropic 对该分类提出异议,告诉 Wiz 这一场景"超出了我们的威胁模型":开发者在会话开始时选择信任该文件夹,随后批准了编辑操作,因此决定是开发者本人做出的。Anthropic 还表示,Claude Code 的符号链接警告已于 2 月初发布,早于 Wiz 的私下报告,属于例行强化而非漏洞修复,并称此前一封"不予置评"的回复是一封自动回复邮件。六家厂商中,Anthropic 是唯一一家认为这不属于缺陷的厂商;三家已发布修复,两家正在修复中。然而,其立场所引发的问题确实存在,且不仅仅需要 Anthropic 来回答:当开发者已经选择信任一个恶意代码库时,编程代理应当在多大程度上对其进行保护?
除了打补丁之外,养成一些习惯也可以降低风险,无论使用哪款工具。以受限的文件访问权限运行代理,或将其置于沙箱或容器中执行。让代理"设置"代码库之前,先仔细查看其 README 和隐藏的配置文件。在陌生代码库中操作后,检查攻击所针对的文件——这些文件位于项目之外,因此不会出现在 `git status` 中:shell 启动文件、SSH 密钥以及 AI 工具自身的配置。例如,使用 `ls -la ~/.zshrc ~/.ssh/authorized_keys` 检查它们的时间戳,可以看出在代理运行期间是否有任何更改。
来源信息
来源:The Hacker News
原文链接:https://thehackernews.com/2026/07/ghostapproval-symlink-flaws-could-let.html
作者:info@thehackernews.com (The Hacker News)

