乐于分享
好东西不私藏

当 AI 编程工具开始拥有你的权限,我们该重新理解信任边界

当 AI 编程工具开始拥有你的权限,我们该重新理解信任边界

今年 7 月,有个漏洞让我后背发凉。

不是因为它多复杂,而是因为它让我意识到:我们可能还没有准备好信任一个真正拥有操作权限的 AI。

安全公司 Wiz 披露了一个叫 GhostApproval 的东西。攻击手法简单到不像真的:攻击者可以在恶意仓库中构造一个名为 project_settings.json 的符号链接文件——看起来就是个普通配置,但它其实是个符号链接,悄悄指向你机器上的 ~/.ssh/authorized_keys

你 clone 下来,用 AI 编程工具打开,跟它说"帮我给这个配置加几行"。AI 弹出审批框:"即将写入 project_settings.json,允许吗?"你点了允许。

然后呢?AI 工具在执行写入操作时,最终写入目标被符号链接重定向到了你的授权密钥文件。从这一刻起,攻击者可能获得访问你的开发环境的能力。全程你没看到任何异常——审批框上写的,确实是 project_settings.json

这不是 AI 被黑了。是审批系统从一开始就被架空了。


一、GhostApproval:你点"允许"的时候,AI 干了你没允许的事

GhostApproval 最恐怖的地方,在于它利用了"眼见"和"所为"之间那条所有人(包括 AI)都默认不存在的裂缝。

符号链接(symlink)是 Unix 世界里再普通不过的东西——一个文件指向另一个文件的快捷方式。AI 编程工具弹审批框时,显示的是"用户/指令里写的那个路径",却没去问操作系统一句:这个路径解析之后,实际会写到哪?

更值得关注的是,这并不像某一个工具的单点缺陷,而暴露出 AI 编程工具在权限设计上的共同挑战:Claude Code、Cursor、Amazon Q Developer、Windsurf、Augment、Google Antigravity,六款不同的 AI 编程工具,都暴露出了类似的权限设计挑战——"信任指令里写的路径,就是真实要写的路径"。

披露时间是 7 月 8 日。Wiz 披露后,部分工具获得了 CVE 编号并修复,包括 Cursor 与 Amazon Q Developer 等;而 Claude Code 选择了不同的处理方式——Anthropic 未将其认定为漏洞,仅增加了符号链接警告(2.1.173+ 起解析符号链接并提示)。

更刺眼的细节来自 Wiz 的还原:Windsurf 在你看到对话框之前就已经写完,按钮只是"撤销"而不是"拦截";Augment 甚至不弹框,能静默读取项目目录之外的 AWS 凭证。

一个品类级的问题,不是六个孤立 bug。 这句话,值得每个用 AI 写代码的人睡前想一遍。


二、从外部攻击到内部透明度:AI 工具的另一条信任线

如果说 GhostApproval 是"从外攻破",那同一个 7 月,还有一条关于"内部透明度"的线索。

今年 6 月底,有开发者对 Claude Code 某版本进行逆向分析,发现其中存在与地区识别相关的代码逻辑。据分析,相关逻辑在此前版本中已存在:它读时区(专门匹配 Asia/ShanghaiAsia/Urumqi),匹配代理域名(内置一份中国域名清单),并将相关识别结果写入运行上下文。Anthropic 后来承认了,说法是"反蒸馏实验",并在 7 月初回滚。

"反蒸馏实验"这一解释,也引出了另一个值得讨论的问题:一家美国公司,在面向全球用户的 AI 编程工具中加入了与地区识别相关的功能,被发现后解释为"在实验"。这类涉及用户环境识别的行为,是否应该更加透明地向用户说明?

更值得玩味的是,据公开报道,部分国内互联网企业近年来开始限制第三方 AI 编程工具的使用,并推进内部替代方案。例如阿里近期针对 Claude Code 发布了内部安全提醒。这类动作跨了半年多,并非同期。

三件事不是孤立的。它们连成一条趋势链:当工具能读全库、能执行,大厂开始重新算「信任账」了——这已经不只是「哪个工具好用」的问题。


三、我的重新思考:它早就不是"IDE 插件"了

作为一个从 Vim 年代摸过来的老极客,这两件事叠在一起,让我重新想清楚了一件事——

我们一直把 AI 编程工具当成"IDE 插件"来信任,但它早就不是了。 它更像一个拥有代码能力的数字代理人。

它能读你整个代码库,能执行 Shell,能碰你的 API 密钥和 ~/.ssh。它运行在你的凭证之下。Augment 的原话很直白:"一个 coding agent 要能改代码、跑代码才有用,它这么干的时候,就是用你的身份在干活。"

当一个工具能读全库、能执行、能联网,它就已经是数字基础设施,不是"帮手"。而我们给它的信任,还停留在"这是个挺好用的插件"的阶段。

GhostApproval 暴露的,正是这个错位的代价:审批框上的文件名 ≠ 实际写入的路径。你以为在授权改配置,其实在授权对方登录你的机器。


四、给极客的几条能落地的建议

如果你每天都在使用 Cursor、Claude Code、Copilot 这类工具,下面这些习惯值得建立。

我不是要你卸载所有 AI 编程工具——它们确实香。但作为一个重新想清楚的人,给你几条我能落地的:

  1. 别在含密钥的目录里跑 agent。 把 ~/.ssh~/.aws.env 所在目录排除掉;克隆外部或不信任的仓库前,先 ls -la 看看有没有指向项目外的符号链接。
  2. 最小凭证原则。 给 AI 工具单独的低权限账号 / 沙箱,别让它碰生产密钥。
  3. 升到已打补丁的版本。 Cursor 升 v3.0+,Amazon Q 升 Language Server 1.69.0+;Windsurf、Augment 截至披露日仍未修复,用时加补偿控制。
  4. 对于 Claude Code 这部分,Anthropic 选择了不同的处理方式。 它只加了 symlink 警告。使用者需要把风险意识放在第一位,而不是假设厂商会兜底。
  5. 不要把 Agent 当助手,要当实习生。 我现在更倾向于把 AI Agent 当成一个能力很强、但权限未知的新同事,而不是一个普通插件。新同事入职第一天,我们不会直接给生产服务器权限——对待 Agent,也该是这样。

结尾

回到开头那个画面:你点"允许",以为在改配置,其实门已经被打开。

AI 编程给了我们前所未有的效率,也给了我们前所未有的信任盲区。工具越强,越要搞清楚——它到底在我的授权范围内,还是在我"以为"的授权范围外?

这道题,没有厂商会替我们答。只能我们这些写代码的人,自己把它想清楚。


参考资料

  • Wiz:GhostApproval Research
  • NVD:CVE Database
  • Anthropic:Claude Code 相关更新说明