← すべての投稿に戻る
公開日 · 著者 Renaud Deraison

脱出 1 回につき 4 万ドル

10 月 6 日の Pwn2Own Ireland で、Ikotas Labs はたった 1 つの引数インジェクションのバグで OpenAI Codex をサンドボックスの外へ連れ出し、4 万ドルを獲得しました。コーディングエージェントはいまや Pwn2Own の常設部門です。5 月のベルリンでは Codex が 3 回陥落し、3 チームが Claude Code に対してエクスプロイトを実行しました。ルールは勝利の意味を定めています。エージェントがサンドボックスを有効にしたまま出場者のリポジトリ、Web ページ、ファイルを開き、その外でコードが実行されることです。Bromure Agentic Coding では、エージェントのサンドボックスの外もまだ Linux VM の中です。その VM が持つのは代用キーだけで、出口、push のダイアログ、トレースは Mac 側にあります。

Pwn2Own は、コーディングエージェントのサンドボックスの外で動くコードに 4 万ドルを 支払います。ノートパソコンでは、サンドボックスの外にあるのはあなたのアカウント、 鍵、そしてリポジトリです。

10 月 6 日火曜日の午後 6 時、コークで Ikotas Labs が Pwn2Own Ireland 2026 の舞台に立ちました。標的は OpenAI Codex です。Zero Day Initiative の結果欄は 1 行 だけでした。Ikotas は「used a single argument injection bug to exploit OpenAI Codex. They win $40,000 and 4 more Master of Pwn points.」 BleepingComputer と Infosecurity Magazine は翌朝、初日の 32 件のゼロデイの 1 つとしてこれを報じました。

ZDI がこのバグを公開するのは 90 日後です。Pwn2Own がベンダーに修正版の提供期間と して与える猶予です。エクスプロイトが何を達成しなければならなかったかは、コンテスト のルールに書かれています。

勝利とは何か

Pwn2Own にはコーディングエージェントの独立した部門があります。 Ireland 2026 のルール は 2 つの標的を挙げています。Anthropic Claude Code と OpenAI Codex で、賞金はそれ ぞれ 4 万ドル、どちらも Windows 11 上で動きます。条件は厳格です。

  • サンドボックスと分離の機能はデフォルト設定で有効にし、安全でない実行モード (--dangerously-skip-permissions やそれに相当するもの)は一切有効にしない。
  • 挑戦は「出場者が管理するリソース(Web ページ、リポジトリ、メディアファイルなど) とやり取りしなければならない」。攻撃は「コーディングエージェントの一般的なユース ケースでなければならない」。
  • エージェントの「想定されたサンドボックスと権限の境界」を越えて任意のコードを実行 するか、「通常はアプリケーションのサンドボックスからアクセスできない」機密情報を 取得しなければならない。

ルールは 3 つの出発点を定めています。エージェントがすでに信頼済みのフォルダで動い ていて、攻撃が 1 つのセッション内で起きる場合。エージェントが、まだ誰も信頼して いない出場者のリポジトリで起動される場合。デスクトップアプリが出場者のプロジェクト を開く場合。どれも開発者が一日中やっていることです。作業する、新しいものをクローン する、新しいものを開く。

ルールはさらに、対象外となるもののリストも定めています。モデルを言いくるめること、 環境に設定された認証情報、安全でないモード、サードパーティの MCP サーバー。賞金が 支払われるのは 1 つのことに対してだけです。エージェント自身の境界を破ることです。

5 か月、2 つのコンテスト

Ireland は、コーディングエージェントが対象に入った 2 回目の Pwn2Own です。 5 月のベルリン では、Compass Security が初日に「a single CWE-150 bug」で Codex を攻略し、4 万ドル を得ました。同じ日に Doyensec がベンダー既知のバグで攻略し、3 日目には Ikotas Labs の Satoki Tsuji が外部制御の脆弱性を通じて再び攻略し、標的の上で電卓を起動しました。 Security Affairs は Codex に対する 3 つの勝利をこうまとめています。「Each exploit used a different technique, meaning the attack surface is not a single narrow flaw but something broader.」

Claude Code はベルリンで、Viettel Cyber Security、Compass Security、Out of Bounds から 3 つのエクスプロイトを受けました。3 つともコリジョンでした。バグは舞台上で動作 し、Anthropic はすでにそれを把握していました。コリジョンは研究者が一番乗りではない ため賞金が下がりますが、エクスプロイトがコンテストでインストールされたバージョン に対して動いたことに変わりはありません。

そして 5 か月後の Ireland で、Codex はまたしても 1 つのバグで陥落しました。

ZDI はまだ Ireland のバグを説明していませんが、引数インジェクションはコーディング エージェントではおなじみのクラスです。エージェントの権限レイヤーはコマンドを名前で 承認します。git、rg、find は読み取り専用とされ、確認なしで実行されます。攻撃 者はリポジトリ内のファイル名、ブランチ名、設定値を通じて引数を与え、「読み取り専用」 のツールがプログラムを実行するオプションを受け取ります。Git の --upload-pack、 ripgrep の --pre、find の -exec はいずれもコマンドを受け取ります。7 月には Pillar Security が、Codex の安全なコマンドのリストが、実際の呼び出しは読み取り専用 ではないのに git show を名前だけで信頼していた と報告しています。

これらのエクスプロイトはどれも、エージェントの内側にあるチェックを破っています。 エージェントのベンダーが書き、エージェントのアップデートとともに配布されるチェック です。ベンダーは 1 つずつ修正し、コンテストは次を見つけます。シェルコマンドを解析 する権限レイヤーは大きな標的であり、4 万ドルの賞金は腕の立つチームを探し続けさせる からです。

ノートパソコンで脱出が手に入れるもの

Pwn2Own では、エクスプロイトが取得すべき「機密情報」をスポンサーが決め、審査員が クリーンなテストマシンで確認します。開発者のノートパソコンでは、誰もフラグを選ぶ 必要はありません。エージェントのサンドボックスの外はあなたのユーザーアカウントで、 そのアカウントには次のものがあります。

  • ~/.ssh/id_ed25519 と known_hosts にあるすべてのホスト
  • ~/.aws/credentials、~/.config/gcloud、~/.kube/config
  • push 権限を持つ gh のトークンと、すべてのチェックアウトにある .env ファイル
  • エージェント自身の OAuth トークンとセッション履歴
  • ディスク上の他のすべてのリポジトリと、その隣のブラウザプロファイル

コンテストは、現実の攻撃者が毎日使う経路も除外しています。エージェントを言いくるめ てコマンドを実行させるプロンプトインジェクションは対象外です。確認を止めるために --yolo モードで動かす開発者も同様です。現実には、これらの経路はすべてサンドボック ス脱出と同じ場所にたどり着きます。あなたとして動くプロセスです。

ノートパソコン:境界は 1 つ、それもエージェントのもの侵入経路攻撃者のリポジトリ等+サンドボックスのバグプロンプト注入コンテストでは対象外安全でない / yolo モードコンテストでは対象外エージェントのサンドボックスノートパソコン上のあなたのアカウント~/.ssh/id_ed25519~/.aws/credentials ~/.kube/configpush 権限付き gh トークン全チェックアウトの .envOAuth トークン、履歴他のリポジトリ、ブラウザネットワーク:任意のホストとポート、記録なしエクスプロイトに必要なものも、出口も、すでにここにある。
ノートパソコンでは、エージェントのサンドボックスが唯一の防衛線です。Pwn2Own 型の脱出も、プロンプトインジェクションも、安全でないモードも、行き着く先は同じです。開発者のアカウント、鍵、ネットワークを持つプロセスです。

Bromure のマシンで同じ脱出が起きたら

Bromure Agentic Coding では、Codex と Claude Code は Mac 上の Linux VM の中で動き ます。マシンごとに 1 つの VM です。エージェント自身のサンドボックスはそのまま残り、 これまでどおり役目を果たします。その下に、エージェントのベンダーが書いたものでも、 リポジトリが設定できるものでもない、2 つ目の境界があります。Apple の Virtualization.framework で、その向こう側にホストがあります。

Ikotas Labs のエクスプロイトをマシンの中で再現してみましょう。エージェントが出場者 のリポジトリを開き、引数が受け取るべきでないコマンドに届き、Codex のサンドボックス の外でコードが動きます。それは VM のユーザーとして動きます。そこからノートパソコン のリストにある項目を 1 つずつ探し、見つかるのはそれぞれの VM 版です。

ファイルはマシンのファイル

VM には独自のシステムディスクがあります。署名済み Ubuntu イメージの copy-on-write クローンです。ホームディレクトリも独自のものです。Mac のホーム、キーチェーン、 ブラウザプロファイル、他のプロジェクトはそこにはありません。VM から見える Mac の フォルダは、そのマシンの Folders ペインで共有したものだけで、信頼できないコード 用のマシンには 1 つも要りません。リポジトリは VM のホームにクローンしてください。

鍵は代用品

VM 内のファイル、環境変数、プロセスのどれにも、本物の API キー、OAuth トークン、 AWS のシークレット、SSH 秘密鍵は含まれていません。VM が持っているのは正しい形をした 偽物です。ANTHROPIC_API_KEY=sk-ant-api03-brm-… や、GitHub が拒否する ghp_ トー クンのようなものです。リクエストが VM を出たあと、Mac 上のプロキシが本物の値に差し 替えます。それも、その認証情報が属するホストに対してだけです。

~/.ssh にはコピーできる秘密鍵がありません。SSH_AUTH_SOCK は vsock 経由で Mac 上の ssh-agent につながるブリッジで、要求に応じて署名し、鍵そのものは決して渡しま せん。鍵に Ask before use をオンにすると、署名のたびに Mac にダイアログが出ます。

代用品は仕掛け線としても働きます。エクスプロイトが見つけたものをまとめて送り出すと、 プロキシは偽のトークンが発行先ではないホストへ向かうのを目にします。プロキシは HTTP 451 を返し、何も転送せず、VM を一時停止し、Mac に This environment may have been compromised を表示します。そこにはトークン、 それが属するホスト、送信先のホストが並びます。

出口は Mac を通る

VM が開くすべての接続は、ポートやプロトコルにかかわらず、ホスト上の仮想スイッチと プロキシを通ります。マシンの Guardrails ペインには送信方向のファイアウォールが あります。ホスト、IP 範囲、プロトコル、ポートごとのルールと、Allow または Deny を選ぶ Unmatched traffic 設定です。見知らぬ人のコードに使うマシンなら、 モデルプロバイダー、パッケージレジストリ、GitHub を許可し、残りを拒否できます。 そうすれば、エクスプロイトが外へ連絡しようとしても接続は成立しません。

Security Timeline は、ルールを設定したかどうかにかかわらず、ファイアウォールの 判定を記録します。常にすべてのマシンで有効で、プロジェクトが一度も必要としなかった ホストへの接続は、それを開いたセッションの隣に表示されます。

push と書き込みはクリックを待つ

ノートパソコンのリストで最悪の戦利品は gh のトークンです。push 権限があれば、 侵害されたマシン 1 台が侵害されたパッケージに変わるからです。新しいマシンでは、保護 対象のすべてのサービスが Prompt before write を使います。HTTPS 経由の git push は書き込みなので、プロキシはそれを保留し、macOS は通信上に現れたままの操作とともに Allow write on "github.com" from workspace "…"? を表示します。同じポリシーが クラウド API、Kubernetes、レジストリ、データベースにも適用されます。ダイアログは プロキシが読み取った内容から Mac 上で描かれるため、VM 内のコードはそれに答えることも、 文言を変えることもできません。

トレースが経緯を残す

引数インジェクションは、ありふれたツール呼び出しから始まります。デフォルトのトレース レベル AI request details では、プロキシがモデルプロバイダーとのやり取りをすべて Mac 上で暗号化して保存し、Trace Inspector がそれぞれをツール呼び出し、シェルコマンド、 ファイル読み取りに分解します。1 月に ZDI がバグを公開したら、それを引き起こした コマンドと引数をトレースから検索できます。検索するその記録は Mac 上で書かれたもので、 VM で動いたものの手の届かない場所にあります。

後始末は 1 台のマシンで完結する

エクスプロイトがホームディレクトリに何かを書き込んでいたら、Rewind home… で以前 の起動時に取ったチェックポイントまで巻き戻せます。侵害検知に引っかかったマシンは、 Wipe and Launch を選ぶまで起動を拒否します。これはディスクとホームを作り直し、 設定と Mac 上の本物の認証情報はそのまま残します。一度だけ眺めたいコードには、 bromure-cli vm run --rm を使えば、停止時にディスクごと削除されるマシンを起動でき ます。

Bromure:脱出先は VM、出口は Mac にあるマシンの VM(Ubuntu)Codex のサンドボックス:引数 1 つで突破コードは VM のユーザーとして動く見つかるものANTHROPIC_API_KEY=sk-ant-api03-brm-…GH_TOKEN=ghp_… (代用品)~/.ssh:秘密鍵なしこのマシンのホームだけMac のホームも他の案件もないスイッチ + プロキシ(Mac 上)ファイアウォール:未知のホスト → 拒否判定は Security Timeline に代用品が範囲外へ → 451、VM 停止トレース:全ツール呼び出しとコマンド、Mac 上で暗号化macOS ダイアログ:Allow write on …?POST /acme/app.git/git-receive-packインターネットモデルプロバイダーパッケージレジストリgithub.com攻撃者のホスト:接続されないVM の外、Mac に残るものAPI キーと OAuth トークン · git とクラウドの認証情報 · SSH 秘密鍵 · ホームフォルダ · 他のプロジェクト · トレース
Bromure のマシンで同じ脱出が起きた場合。エージェントのサンドボックスはやはり破られますが、コードがたどり着くのは独自のホーム、代用の認証情報を持ち、秘密鍵のない VM です。出口、書き込みのダイアログ、トレースは Mac 側にあります。

どの扉が開いても

Pwn2Own のルールがプロンプトインジェクション、安全でないモード、保存された認証情報 を除外しているのは、勝利がエージェント自身の境界という 1 つのことだけを測るように するためです。コンテストとしては正しい試験です。しかし、あなたのノートパソコンを 狙う攻撃者は、除外された 3 つの経路をすべて使います。

VM の境界は、コードがどうやってエージェントから抜け出したかに左右されません。引数 インジェクションのバグ、モデルを言いくるめてコマンドを実行させる毒入りの README、 インプラントをダウンロードするテストファイル、午前 2 時に確認をオフにした開発者。 どれも最後は VM のユーザーとして動くコードになり、同じ代用品、同じファイアウォール、 Mac 上の同じダイアログの前に立ちます。OpenAI は Ireland のバグの修正を自社のスケ ジュールで出すでしょうが、それまでの間も、このバグは他のバグと同じように VM の境界 にぶつかります。

脱出先は VM

エージェントのサンドボックスを抜けたコードは、そのマシンのホームと、あなたが 共有したフォルダを持つ VM のユーザーとして動きます。Mac のホーム、キーチェーン、 他のプロジェクトは中にありません。

鍵は代用品

本物の API キー、git トークン、クラウドのシークレットは Mac 上で暗号化された ままで、SSH 鍵はブリッジ越しに署名します。範囲外に送られた代用品には 451 が 返り、マシンは一時停止します。

push には Mac でのクリックが必要

新しいマシンのデフォルトである Prompt before write では、git push や破壊的な クラウド呼び出しは、VM が答えられない macOS のダイアログを待ちます。

記録はホストに残る

送信ファイアウォール、Security Timeline、トレースはすべて Mac 上で動きます。 バグが公開されたとき、すべてのセッションの履歴がそこで検索できます。

次も必ず来る

Pwn2Own は春にまた開かれ、コーディングエージェントはまた対象に入るでしょう。コー ディングエージェントは、開発者のマシンの上で、開発者と同じ範囲に手が届く状態でコマ ンドを実行するからです。どこかのチームが誰も見たことのないバグを持ち込みます。ベン ダーは 90 日以内に修正し、次のコンテストでカウントはまたゼロから始まります。

エージェントは更新し続けてください。そして、エージェントのサンドボックスの向こうに ある戦利品が代用キーしか持たない VM であるマシンで動かしてください。その境界がなぜ ホスト側にあるのかについては、 ガードとシェルの見解は食い違っていた と 11 件のテストが通った をお読みください。