AI++
公司动态·2026-08-05·6 分钟阅读·Cameron Mcloughlin

Zed 从 1.14 起给 Agent 默认上沙箱:由操作系统兜底,而不是提示词

8 月 5 日,代码编辑器 Zed 宣布 Agent 面板的终端与网页抓取工具自 1.14 版起默认沙箱化,限制由操作系统强制执行,不依赖智能体是否听话。默认规则禁止在项目目录外写入、禁止写 .git、禁止发起网络请求,智能体需要时可申请临时提权并说明理由。Zed 明确指出细粒度命令规则在稍有手段的攻击者面前会瞬间失效,并披露了其沙箱对 symlink swap 攻击采取失败即拒绝的处理方式。

背景:提示词管不住的那部分

编码智能体的权限问题长期卡在两个极端之间:一端是逐条审批,安全但把自动化的价值消耗殆尽;另一端是所谓 YOLO 模式,把机器完全交出去。Zed 工程师 Cameron Mcloughlin 在 8 月 5 日的官方博客里把矛盾说得很直白——张力的根源在于,智能体没有能力判断某个操作是不是用户真正想要的。

Zed 的回答不是宣称解决了这个难题,而是承认在解决之前,沙箱是约束智能体行为最实际的手段。

Zed Agent 沙箱

事实:默认开启,由内核而非模型说了算

1.14 版本起,Zed Agent 面板的终端工具与 fetch 工具默认沙箱化,且对所有用户默认开启。默认规则包含三条:

  • 禁止在项目目录之外写入
  • 禁止写入 .git
  • 禁止发起网络请求

当默认规则不够用时,智能体可以申请临时提权。用户看到的弹窗会明确显示它请求哪些权限、以及请求理由,可选择本次允许、本线程内允许或永久允许。有一条例外是硬性的:智能体不得申请 .git 的写权限——因为写入 .git 意味着可以植入 hook,而 hook 会在沙箱之外运行。

实现层面完全依托操作系统原生能力:macOS 使用 Seatbelt,Linux 通过 Bubblewrap 使用命名空间,Windows 走 WSL。需要注意的部署前提是,Windows 上的非 WSL shell 不支持沙箱;Linux 与 WSL 用户需确保 $PATH 中存在未设置 setuid 位的可用 bwrap 二进制。

为什么不用细粒度规则就够了

Zed 此前就支持对终端工具配置细粒度规则,比如禁止匹配 git .* 的任何命令。博客用一段很实在的论证说明为什么这条路走不通:一个真想改你 .git 目录的智能体,可以用 bash -c 'git ...',可以先把命令塞进环境变量再 bash -c $EVIL_CMD,可以把命令写进文件、chmod +x 后执行,还可以直接用 Python 绕开——枚举不完。

结论是:细粒度规则在面对一个方向正确的智能体时是好用的指引,在面对哪怕只是略有手段的攻击者时会瞬间崩塌。

博客还点名了提示词注入这一现实威胁场景:你在开源项目里 review 一个贡献者的 PR,让智能体帮忙看一眼,而这个 PR 里夹带了一份被修改过的 AGENTS.md,指示智能体把 $MY_SECRET_API_KEY 上传到攻击者控制的服务器。Zed 指出这类事已经发生过,并且只会越来越常见。指令约束对此几乎无能为力,而沙箱的价值恰恰在于它根本不提供访问这些资源的通道。

Zed 沙箱提权请求界面

影响:安全边界正在从提示词下沉到运行时

Zed 在文中强调了沙箱这类功能与普通功能的差别:单个 bug 就可能击穿用户安全,因此不能用“实践中不会发生”来搪塞,只能问“攻击者能不能让它发生”。文章公开了一个具体案例——被作者称为 symlink swap 的攻击:Linux 下 Zed 用 Bubblewrap 控制文件系统访问,攻击者可尝试在权限检查与实际挂载之间调换符号链接。Zed 表示其沙箱能捕获这一攻击并采取失败即拒绝的策略,即不可信命令不会被执行。这种把已知攻击面和处理方式摊开写的做法,在同类产品的发布说明里并不常见。

把时间窗拉开看,这不是孤立动作。同一周内,开源编码智能体 Cline 在 8 月 5 日的 v4.1.4 中,把 Plan 模式下的文件编辑类 shell 命令从提示词劝阻改为执行层硬阻断;Anthropic 在 8 月 6 日的 Claude Code v2.1.223 中,一口气修掉了多处让命令能在审批弹窗里藏住自身片段的权限绕过。三家产品在同一时间窗做的是同一件事——把智能体的安全边界,从模型是否听话,挪到操作系统和执行层是否允许。

对使用方来说,这意味着两个现实变化:一是升级到 Zed 1.14 后,此前依赖智能体自由访问网络或跨目录写入的工作流会开始弹提权框,需要重新配置;二是评估编码智能体时,“有没有 OS 级沙箱”正在从加分项变成基础项。

来源

智能体安全沙箱Zed提示词注入编码智能体