セキュリティ研究者らが、OpenAI Codexのサンドボックスから脱出する2つの手法を発見しました。そのうち1つは、Codexの最も厳格なロックダウンモードであっても、承認プロンプトを表示することも画面に何も映すこともなく、開発者のマシン上でコマンドを実行できるというものです。
Accomplish AIのOren Yomtov氏によると、両方の脆弱性は8月12日にOpenAIへ報告され、8日以内に修正されたということです。
2つのうちより深刻な方は、研究者らが「Heapjack」と呼ぶ手法で、ごく普通の操作をリモートコード実行につなげてしまいます。他人のリポジトリをCodexで開き、そのコードについて質問するだけで、そのリポジトリの作成者があなたのコンピューター上でサンドボックス外のコマンド実行権限を得てしまうのです。
Codexは、コマンドラインツールおよびデスクトップアプリとして提供されているOpenAIのコーディングエージェントです。他社の競合エージェントと同様、モデルの動作をサンドボックス内で実行することで、信頼できないコードが広範なシステムに触れないようにしています。今回発見された2つの脱出手法は、いずれも内部からこの境界を突破するものです。
Heapjack
Yomtov氏の解説記事によると、Heapjackという手法はnode_replと呼ばれるコンポーネントを標的にしています。これはCodex Desktopがインストール時にグローバルな’~/.codex/config.toml’ファイルに書き込むものです。
このコンポーネントにはオプトインの仕組みも無効化する設定もありません。しかも設定内容が共有のconfigファイルに存在するため、通常のCodex CLIユーザーも、何も確認されることなく同じツールを引き継いでしまいます。
node_replは単一のNode.jsプロセスを実行し、その中に2つの独立したJavaScript実行コンテキストを保持します。一方は信頼済みでOpenAI自身のコードを含み、もう一方は信頼されておらずエージェントのコードを実行します。信頼済みコンテキストは、実行のたびに新しく生成されるランダムなトークンを提示することで、自らが信頼済みであることを証明します。
問題は、両方のコンテキストが1つのNodeプロセス内に存在し、1つのメモリヒープを共有していることです。そのため、このトークンは単にメモリ上に置かれた文字列にすぎず、信頼されていない側からも読み取ることができてしまいます。

信頼されていないコードは’v8.getHeapSnapshot()’を使ってヒープのスナップショットを取得し、UUIDの形をした文字列をすべて試します。推測が外れると「not authorized」が返りますが、正しいトークンに不正な引数を組み合わせた場合は実際のバリデーションエラーが返るため、攻撃者はトークンが正しいことを知ることができます。
トークンを手に入れた信頼されていないコードは、信頼済みコンテキストがネイティブでサンドボックス化されていない親プロセスと通信するために使うのと同じパイプに、自らのリクエストを書き込みます。
親プロセスはトークンをチェックし、有効なものと判断すると処理を実行します。概念実証(PoC)では、システムの’open’コマンドを使って、Codexのプロセスツリーの外側でアプリケーションを起動していました。同じアクセス権限があれば、任意のUnixソケット(分かりやすい標的としてはDockerデーモンのソケット)や、グローバルなconfigファイルを編集するツールにも到達可能です。
これらはすべて、エージェントが本来一切書き込みを行えないはずの、最も厳格なサンドボックスモードである読み取り専用モードで実行されています。
Overpatch
2つ目の脆弱性であるOverpatchは、オープンソースのCodex CLIに存在します。ワークスペース書き込みモードでは、エージェントはプロジェクトフォルダ内にしか書き込みができず、ホームディレクトリを対象としたシェルコマンドは拒否される�仕様になっています。
研究者らは、Codex自身のパッチツールであるapply_patchを使い、それでもなおホームディレクトリへの書き込みを実現させました。
このツールは、パッチ内で指定された各パスの親フォルダに書き込み権限を付与します。’/tmp’を指定すれば、ディスクのルートに対する書き込み権限が付与されてしまうのです。
実際に機能するエクスプロイトでは、2つの変更を含むパッチが使われました。1つは’/tmp’を指定するだけで、権限を広げる以外には実質的に何もしないもの。もう1つは、ホームディレクトリへのシンボリックリンクを介して’.zshrc’に1行を追記するものです。
1つ目の変更を取り除くと書き込みは拒否されますが、これを含めておくと、開発者が次にターミナルを開いた際、攻撃者が仕込んだその行がサンドボックスを介さずに実行されてしまいます。
根底にある共通の誤り
この2つのバグには共通する構造があります。それは、強制のメカニズム自体が、本来それが取り締まるべき対象の内部に存在していたという点です。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が報告から8日以内に両方の問題を解決したと評価しています。
BleepingComputerは、本記事の公開に先立ちOpenAIにコメントを求めています。