OpenAI Codex沙箱两度被突破:Accomplish披露两个高危漏洞

导语:Accomplish 安全团队近日披露在 OpenAI Codex 中发现两个独立的沙箱逃逸漏洞,分别影响 Codex CLI 与 Codex Desktop。攻击者只需让用户在受影响环境下打开仓库、提出一个普通问题,即可在不触发任何审批提示的情况下获得未沙箱化的命令执行权限。OpenAI 在收到报告后 8 天内完成了修复。


一、事件概述

Accomplish 是专注于 AI 代理安全隔离的厂商,其团队于 2026 年 8 月 12 日向 OpenAI 同时提交了两个 Codex 沙箱逃逸漏洞。两个漏洞相互独立,分别位于 Codex CLI 的写权限实现与 Codex Desktop 内置的 node_repl 工具中。OpenAI 在 8 天内完成修复,目前两个漏洞均已不可复现。

Codex 的设计目标之一,是让 AI 编码代理在不离开沙箱的前提下完成读写、运行命令等任务。workspace-write 模式与 read-only 模式被广泛用于”打开陌生仓库做问答”这一常见场景。本次披露的两个漏洞,恰好覆盖了从写权限模式到只读模式的两个层级——read-only 同样未能幸免。

二、Overpatch:CLI 中的写权限越界

Codex CLI 在 workspace-write 模式下,会拒绝任何指向工作目录之外的写操作,例如直接执行 cd $HOME && touch x 会被拦截。问题出在 Codex 提供给模型用于编辑文件的 apply_patch 工具上:它在解析补丁路径后,会把每条路径的父目录一并加入写权限允许列表。

这意味着,只要补丁里出现 /tmp 这种根级路径,工具就会”贴心”地把整个 / 的写权限发放给模型。攻击者只需构造一段同时包含两处改动的 patch:

  • 一处通过指向 $HOME 的符号链接把内容写入 .zshrc
  • 另一处直接命名 /tmp,但因无法把文件覆盖到一个目录而失败——它的作用不是写入,而是”撑大”权限范围。

下次用户打开终端,.zshrc 就会被加载,原本只能在工作目录里写文件的沙箱,等同于被整个解除。整个过程无需用户审批,沙箱机制无从察觉。

三、Heapjack:Desktop 中凭据泄漏导致的只读模式突破

Codex Desktop 在安装时会向全局 ~/.codex/config.toml 写入一个 [mcp_servers.node_repl] 段,未提供关闭选项,CLI 因此也会加载同一个工具。该工具本身是一个原生 Rust 程序,运行在沙箱之外,负责打开应用、连接 Unix 套接字、读写配置文件;它再 fork 出一个 Node 进程并通过 Codex 沙箱运行,所有 JavaScript 都在沙箱中执行。

为区分受信与不受信代码,Node 进程内开了两个 V8 上下文:受信上下文持有 OpenAI 自家代码和一个随机生成的”信任令牌”,不受信上下文跑模型生成的代码、不持有该令牌。两者同处一个 V8 isolate、共享同一份堆内存。

漏洞就在这里——令牌只是一段字符串,而堆是共享的。不受信代码只需要调用 v8.getHeapSnapshot(),在快照里逐个尝试符合 UUID 形状的字符串,就能命中真正的令牌。拿到之后,它把伪造的 JSON 请求写入与受信上下文共用的 stdout 管道(fd 1),Rust 父进程按格式读取、校验令牌、然后执行操作。

由于父进程最终调用的是系统 open 命令,触发的进程会通过 launchd 在 Codex 进程树之外启动,从而彻底脱离沙箱。所有这一切,发生在 Codex 公开宣称的”最严格”只读模式下,整个过程没有任何审批提示出现。

两种沙箱逃逸路径示意

四、共同特征与设计启示

两个漏洞虽然技术细节不同,但呈现出同一类问题:执行边界与被边界保护的对象,运行在了同一个进程或同一份内存里apply_patch 根据自身输入推导自身的权限边界;node_repl 把用来证明受信身份的秘密,与不受信代码放在同一堆中。结果都是”边界从内部被告知放行”。

这类问题的本质不是某行代码写错,而是当一个工具既要执行写操作、又要自行决定权限范围时,它本身就成了攻击面。一个稳健的沙箱,应当让”谁可以做什么”由独立于被隔离进程的实体来裁决,而不是由被隔离进程自己陈述。

这也解释了 Accomplish 的产品设计选择——把整个代理、bash、git 以及它们派生的全部进程放进一台 VM,真实凭据根本不进入 guest 内,代理只能在 host 端代理的后面访问外网。运行 Overpatch,patch 写到 VM 里;运行 Heapjack,应用也在 VM 里启动。两种逃逸路径都被 VM 边界吞掉。

五、修复情况与用户建议

OpenAI 收到报告后,对 apply_patch 的父目录授权逻辑与 node_repl 的令牌存放机制分别进行了调整:前者收紧了写权限推导路径,后者将受信代码迁出了与不受信代码共享的堆。两个修复均在 8 天内上线。

对普通用户与企业的建议:

  • 尽快升级到 Codex 的最新版本;
  • 审慎对待”在 Codex 里打开陌生仓库、随便问一句话”这种轻量场景——只读模式并不等于安全;
  • 关注 Codex 后续的安全公告,尤其是涉及 apply_patch、MCP server 与 node_repl 的更新说明;
  • 在处理不可信仓库时,优先在一次性环境或 VM 内运行 Codex,避免把模型工具直接放在主工作机上。

六、总结

本次披露再次提醒业界:“沙箱”这个标签本身并不提供安全保证,决定安全的是边界划在哪里、由谁来裁定。当 AI 代理被赋予越来越强的系统能力,写权限推导、进程间信任令牌这种”细节”,反而成了最容易被忽视、却最容易被撬动的支点。Codex 修复及时是值得肯定的,但更深层的设计原则——把边界判定从被隔离对象中彻底剥离——值得每一个正在构建代理平台的团队借鉴。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容