研究人员逃逸 OpenAI Codex 沙箱,在主机上运行命令
- 浏览次数 2105
- 喜欢 0
安全研究人员发现了两条逃离 OpenAI Codex 沙箱的路径,其中一条能够从 Codex 锁定最严格的模式在开发者的机器上运行命令,无需批准提示,屏幕上也不显示任何内容。
据 Accomplish AI 的 Oren Yomtov 称,这两个漏洞均于 8 月 12 日报告给 OpenAI,并在八天内得到修复。
两者中更严重的一个被研究人员称为 Heapjack,它将一个日常操作转化为远程代码执行:在 Codex 中打开别人的仓库,向它提一个关于代码的问题,而该仓库的编写者就能在你的计算机上获得未经沙箱限制的命令执行。
Codex 是 OpenAI 的编码代理,以命令行工具和桌面应用形式提供。与同类代理一样,它在沙箱内运行模型的操作,使不可信代码无法触及更广泛的系统。这两种逃逸方式都是通过从内部攻破该边界实现的。
Heapjack
正如 Yomtov 在其文章中所描述的,Heapjack 技术针对一个名为 node_repl 的组件,该组件由 Codex Desktop 在安装时写入全局的 '~/.codex/config.toml' 文件中。
没有选择加入机制,也没有关闭它的设置,而且由于该条目位于共享配置中,普通的 Codex CLI 用户在未被询问的情况下就继承了同一工具。
node_repl 运行单个 Node.js 进程,其中包含两个独立的 JavaScript 执行上下文。一个是受信任的,包含 OpenAI 自己的代码。另一个是不可信的,运行代理的代码。受信任上下文通过出示一个每次运行时新生成的随机令牌来证明自己是受信任的。
问题在于,两个上下文存在于同一个 Node 进程中并共享同一个内存堆,因此该令牌只是一个驻留在内存中的字符串,不可信一方可以读取它。
不可信代码使用 'v8.getHeapSnapshot()' 对堆进行快照,并尝试每一个形似 UUID 的字符串。错误的猜测会返回 "not authorized"。带有错误参数的正确令牌会返回一个真实的验证错误,这就告诉攻击者令牌是对的。
拿到令牌后,不可信代码将其自己的请求写入受信任上下文用于与一个原生的、未经沙箱限制的父进程通信的同一管道。
父进程检查令牌,看到一个有效的令牌,便执行工作。概念验证使用系统的 'open' 命令启动了一个完全位于 Codex 进程树之外的应用程序。同样的访问权限可触及任何 Unix 套接字(Docker 守护进程套接字是显而易见的目标),以及一个用于编辑全局配置文件的工具。
所有这一切都在 read-only——最严格的沙箱模式——下运行,在该模式下,代理本不应写入任何内容。
Overpatch
第二个漏洞 Overpatch 存在于开源的 Codex CLI 中。在 workspace-write 模式下,代理只能在项目文件夹内写入,而针对主目录的 shell 命令会被拒绝。
研究人员却让 Codex 自己的补丁工具 apply_patch 写入了那里。
该工具会为补丁中指定的每个路径的父文件夹授予写权限。指定 '/tmp',它就会授予对磁盘根目录的写权限。
可用的漏洞利用程序使用了一个包含两处更改的补丁:一处指定 '/tmp',除了扩大权限外毫无实际作用;另一处通过一个符号链接向主目录中的 '.zshrc' 追加一行。
移除第一处更改,写入就会被拒绝。有它时,开发者打开的下一个终端就会在沙箱外运行攻击者的那行代码。
相同的底层错误
这两个漏洞共享同一个形态:执行机制竟然存活在它本应施加约束的对象内部。apply_patch 根据攻击者提供的输入自行计算其权限。node_repl 把区分受信任与不可信代码的密钥保存在与不可信代码相同的内存中。
在每一个案例中,沙箱都是被从内部指示放行某些东西的。
这类漏洞并不新鲜。2026 年 7 月,Pillar Security 的研究人员在 Cursor、Codex、Gemini CLI 和 Google 的 Antigravity 上演示了同样的思路:停留在沙箱内的代理写入一个文件,而沙箱外的一个受信任工具随后会运行该文件。
在 Yomtov 于 X 上的帖子下,一位评论者写道:"V8 上下文隔离的是全局变量,而非内存,所以沙箱实际上只是一个堆从未同意过的承诺。"另一位则将这一信任边界称为 "房间隔断"。默认启用的行为也招致了审视,有人质问为什么一个特权令牌竟然可以从不可信的 JavaScript 中触及。
应对措施
据 Accomplish 称,OpenAI 在 Codex Desktop 构建 26.818.21641 中修复了 Heapjack,在 Codex CLI 0.149.0 中修复了 Overpatch。
用户应更新到这些版本或更高版本。Yomtov 赞扬 OpenAI 在其报告后八天内解决了这两个问题。
BleepingComputer 在发布前已联系 OpenAI 征求评论。