你的 AI 编程助手可能正在你毫无察觉的情况下重写你的 SSH 密钥。
Wiz Research 发现了一个名为 “GhostApproval” 的漏洞,该漏洞允许恶意的 project_settings.json 符号链接(symlink)指向私钥,而弹出的单次操作确认对话框仅显示该符号链接的名称。一旦你批准该对话框,就相当于赋予了助手对你凭据的无限制访问权限。
漏洞原理
- 攻击者在仓库中添加一个名为 project_settings.json 的文件。
- 该文件并非普通的 JSON 文件,而是一个指向用户 ~/.ssh/id_rsa(或同等路径)私钥的符号链接(symlink)。
- 当开发者要求 AI 助手“设置工作区”时,助手会追踪该符号链接,并准备向真实的 SSH 密钥文件写入内容。
- 弹出的确认对话框仅列出 project_settings.json。它不会解析符号链接以显示磁盘上的实际路径。
- 点击“批准”将授予助手修改私钥的权限,从而有效地破坏了用户在所有信任该密钥的服务上的身份安全性。
该漏洞存在于六款广泛使用的工具中:Amazon Q Developer, Claude Code, Augment, Cursor, Google Antigravity 和 Windsurf。由于 UI 显示的是接收到的名称而非解析后的目标路径,所有这些工具都会显示相同的误导性对话框。
为什么单次操作确认并不足够
“单次操作确认”假设人类能够审查 AI 执行的每一次操作。在实践中,这迫使你每隔几秒钟就要做出完美的判断——没有人能比智能体(agent)的操作速度更快。
厂商的应对措施及其重要性
- Amazon, Google 和 Cursor 已经修复了该问题。
- Anthropic(Claude Code 的开发商)表示,用户必须仅批准他们理解的内容。这忽略了识别符号链接带来的认知负担,并假设用户可以瞬间审计每一个文件路径——这是一种不切实际的期望。
- Cursor 还披露了一个名为 DuneSlide 的独立问题,该问题允许攻击者在无需任何确认提示的情况下在机器上执行代码。该公司已修复该漏洞,这表明当权限检查薄弱时,这些助手会迅速成为攻击向量。
这种反应的分歧引发了一个更深层次的问题:安全应该是事后确认的对话,还是助手永远无法逾越的预定义边界?
作用域权限:一种切实可行的替代方案
与其为每次文件操作弹出提示,开发者可以在助手运行前为其设置一个作用域(scope):
- 定义一个 AI 可以读取或写入的目录树(例如
/src)。 - 任何试图触碰该目录树之外文件(如
~/.ssh/id_rsa)的行为都会被操作系统或沙箱层拦截。 - 作用域只需设置一次,在限制助手影响范围的同时,减少了人类必须做出的决策次数。
作用域机制将安全模型从“每次询问”转变为“仅允许必要的权限”。这借鉴了容器运行时和移动操作系统对应用程序进行沙箱隔离的方式,从而在出现问题时限制损失。
后续关注
- 厂商更新: 密切关注受影响的六款工具的更新日志。
核心结论
GhostApproval 漏洞证明,信任弹窗对话框会给人一种虚假的安全感。在每个 AI 编程助手都能解析符号链接并显示完整路径之前,开发者应当强制执行作用域写入权限——在助手开始工作前,明确告知其可以操作的具体范围。这一简单的改变可以在不增加点击疲劳的情况下,阻断最危险的一类攻击。
来源:dev.to/girish_r/your-coding-agents-approval-dialog-is-lying-to-you-ih1
