ページを読み込むだけで十分だった
AnthropicのFrontier Red Teamによると、未公開のモデルがブラウザとカーネルのバグを見つけ、動作するエクスプロイトに連鎖させた。そのひとつは、ページの読み込みから数秒で macOS 上の標準設定の Chrome を乗っ取った。コーディングエージェントは一日中ページを開いている。Bromure Agentic Coding では、エージェントのブラウザはコード、認証情報、Mac から離れた専用の使い捨て VM で動き、コードレビューの自動化は、すべてのプルリクエストをスキャンせよという Anthropic の助言を自分のマシン上で実践する。
バグ4つ、ページ1枚、数秒。こうしたエクスプロイトチェーンはかつて専門家チームが必要だったが、今はモデルが組み立てられる。コーディングエージェントが操作するブラウザは、開くページのたびにその脅威にさらされている。
10月27日、Anthropic の Frontier Red Team は、未公開の社内研究モデルが「最初のプロンプトの後に」見つけて組み立てた5つのエクスプロイトチェーンに関する報告を公開した。エクスプロイトチェーンとは複数のバグをつなげたもので、各バグが、前のバグでは越えられなかった防御を攻撃に越えさせる。標的は Chrome、Safari、Android、Windows、Linux だった。Anthropic は5件すべてを協調的開示のもとでベンダーに報告しており、昨日この報告を取り上げた The Hacker News は、実際の攻撃で確認されたものはないと伝えている。
Anthropic の結論は一行だ。「フロンティアモデルは、複数の脆弱性を発見し、それらを組み合わせて動作するエクスプロイトにする能力を持っている。」
ページ1枚、バグ4つ
じっくり読むべきは Chrome のチェーンだ。その概念実証は、macOS 上の初期設定の Chrome から「ページの読み込みから数秒以内に」計算機を起動した。計算機は昔ながらの証拠だ。エクスプロイトが Mac でアプリをひとつ起動できるなら、ほかの何でも起動できる。
必要だったバグは4つ。
- Chrome の JavaScript エンジンである V8 の欠陥により、ページがエンジンのメモリを破壊できた。
- V8 の2つ目の欠陥が V8 独自のメモリサンドボックスを抜け出し、ページを描画するプロセスであるレンダラーの制御を攻撃者に与えた。
- CacheStorage の競合状態により、そのレンダラーがサンドボックス外のメモリを読み、より高い権限を持つブラウザプロセスの配置を把握できた。
- Chrome のフェデレーションログイン機能である FedCM の use-after-free が、攻撃者のコードをサンドボックスの完全に外で実行した。
Chrome のサンドボックスは、レンダラーがいずれ破られることを前提に、被害をその中に閉じ込める設計だ。ステップ3と4はそれを覆す。Anthropic によれば、CVE が割り当てられ Chrome 156 の時点で修正済みの Chrome の欠陥を62件報告しており、いずれも深刻度は Critical か High で、うち13件はサンドボックス脱出、21件はレンダラー侵害のバグだという。
Safari のチェーンはコードを一切実行しない。ブラウザのメモリへの読み書きアクセスを得て、値をひとつ書き換えるだけで、あるサイトが別のサイトを読むことを防ぐルールである same-origin policy を無効にする。このルールが切れると、どのページでも Safari の履歴、Cookie、セッションデータを読み、ログイン済みのリクエストを他のサイトに送れた。Apple は iOS と iPadOS 26.5.2 で修正した。
Linux のチェーンは、マルチパス TCP のリスナーを動かしているあらゆるマシンで、ログインなしにネットワーク越しで root シェルに到達した。カーネルアドレスのリークに約48分、シェルの取得にさらに5分かかった。このバグ CVE-2026-98432 は10月15日にアップストリームで修正された。
エージェントはあなたより多くのページを開く
これらはブラウザのバグであり、コーディングエージェントは今や開発者のマシンで最も忙しいブラウザ利用者のひとつだ。ドキュメントを読み、Issue のリンクをたどり、パッケージのホームページを開き、検索結果を確かめ、ビルドしたばかりのアプリを読み込んでスクリーンショットを撮る。ブラウザ用の MCP サーバーやブラウザ拡張機能のおかげで、これは日常になった。エージェントは本物の Chromium を操作し、それは多くの場合、開発者が毎朝ログインするのと同じ Chrome プロファイルだ。
そうしたページの大半は、開発者が自分で選んだものではない。GitHub の Issue にあるリンク、README にある URL、エラーメッセージの検索結果の3番目。どれもが Anthropic のようなチェーンを配信しうるし、Chrome のチェーンならエージェントは何もクリックする必要がない。ページの読み込みが4つのステップすべてを実行する。
ノート PC では、そのチェーンの行き着く先は Mac 上の開発者のアカウントだ。同じアカウントに ~/.ssh、~/.aws/credentials、gh のログイン、エージェント自身の API キー、チェックアウトしたすべてのリポジトリがある。計算機をスクリプトに差し替えれば、それらをすべてコピーされる。Safari のチェーンなら、狙いはブラウザの中身そのものだ。開発者がログインしているすべてのサイトの Cookie とセッションが、1枚のページから手に入る。
Bromure Agentic Coding での同じページ
Bromure Agentic Coding は、Claude Code、Codex、Grok、Kimi、omp を Mac 上の Ubuntu VM で動かす。各マシンには専用のブラウザもある。チャットの横にペインとして開く完全な Chromium で、あなたとエージェントが共有する。エージェントは組み込みの browser MCP サーバーを通じてそれを操作し、移動、クリック、DOM の読み取り、スクリーンショット、コンソールやネットワークログの読み取りのための23のツールを使う。設定は何も要らない。
ブラウザは VM を独り占めする
その Chromium はあなたの Mac では動かないし、エージェントの VM でも動かない。別のサイドカー VM で動く。エージェントの VM とブラウザの VM は、エージェントが起動した開発サーバーをブラウザが読み込めるようにプライベートネットワークを共有しており、共有しているのはそれだけだ。エージェントが書いたファイルはブラウザのディスクにはない。ブラウザ内の localhost でさえ、ブラウザ自身の VM を指す。
Anthropic の Chrome チェーンをこのブラウザに対して実行してみよう。ステップ1から4は設計どおりに動く。レンダラーが破られ、サンドボックスが破られ、攻撃者のコードがブラウザとして動く。そのコードがいるのは、Chromium 以外に何もない VM の中だ。コピーする ~/.ssh も、読む ~/.aws もない。リポジトリ、エージェントの設定、そのトークンはすべて別の VM にあり、Mac はハイパーバイザーの境界の向こうにある。エージェントのブラウザツールも Chromium とプロセスを共有していない。vsock でホストと通信する小さな shim を介して到達する。マニュアルの言葉を借りれば、「悪意のあるページがエージェントのファイルや Mac に触れることは決してない」。
ブラウザは忘れる
既定では、ブラウザは使い捨てだ。ディスクは共有イメージのコピーオンライトのクローンで、ブラウザが破棄されると削除される。非表示のブラウザは約10秒で一時停止し、5分後に破棄され、次のブラウザはクリーンなイメージから起動する。ブラウザの VM に着地したペイロードは、VM とともに消える。
これはコードを実行する代わりに Cookie やセッションを読む、Safari 型のチェーンにも当てはまる。使い捨てのブラウザには昨日のセッションがない。中にあるのはこのタスクの間にエージェントがログインしたものだけで、あなたの普段のブラウジングの痕跡は何もない。普段使いのブラウザは、別のマシン上の別のプログラムだからだ。
ログインを維持する必要があるプロジェクトでは、マシンの Browser 設定にある Stay signed in to websites が、そのマシン専用の暗号化ディスクにプロファイルを保持する。エージェントがテストするステージングサイトにはオンにし、信頼できないコードを扱うマシンではオフのままにしておこう。
エージェント自身の VM には代替品しかない
攻撃者がさらに先へ進み、別の経路でエージェントの VM に到達したとしよう。たとえば、ページの指示に従ってエージェントがインストールした悪意あるパッケージだ。そこにあるキーは代替品だ。gh の設定と ~/.git-credentials にある GitHub トークンは偽物で、Mac 上のプロキシが github.com へ向かう途中でだけ本物に差し替える。ほかのホストに送られた代替品は Mac を出る前にブロックされ、VM は認証情報と送信先を示すアラートとともに一時停止する。
すべてのプルリクエストを、Mac 上でスキャンする
Anthropic は防御側に「自分のコードをスキャンすることはかつてなく重要だ」と伝えている。報告はさらに、スキャンはプルリクエストの時点で行うべきだと付け加える。新しいコードが入り続ける限り、積み残しを片付けても「問題の半分しか解決しない」からだ。
Bromure Agentic Coding にはこれが組み込まれている。code review の自動化は、あなたのマシンのひとつにいるエージェントで GitHub リポジトリを監視し、見つけたものを findings として記録する。findings はスキャンをまたいで重複が除かれる。監視では3種類のスキャンを実行できる。
- 新しいプルリクエストごとに、そのプルリクエストの変更をレビューする。
- 監視対象ブランチへの新しいコミットごと。
- 定期レビューを毎週、前回以降の新しいコミットか、リポジトリ全体に対して行う。完全なベースラインはリスクの高い順にディレクトリ単位で進み、リクエストハンドラー、認証、入力のパースから始める。
5つのエージェントのどれでも実行できる。各レビューは対象にしたコミットに紐づけられ、エージェントは findings_done と要約で実行を締めくくる。スキャンはあなたの Mac 上で、マシンの認証情報を使い、その VM の中で動く。GitHub は Mac から3分ごとにマシンのトークンでポーリングされ、そのトークンが VM に入ることはない。Webhook も開いたポートもない。
プルリクエストのスキャナーは、プルリクエストを開いた誰かが書いた信頼できないテキストを読む。そして無人のレビュアーは承認プロンプトを省略して動く。Bromure は、エージェントが目にする前に、すべてのプルリクエストのタイトル、本文、作成者、コメントを必須のプロンプトインジェクション検査に通す。PromptGuard モデルがインストールされていなければ、イベントで起動される実行は素通りさせずにブロックされる。レビュー自体も代替品だらけの VM で動く。Guardrails でマシンの GitHub 書き込みポリシーを Read-only にすれば、レビュアーはトークンが許すものをすべて読めるが、push や REST の書き込みは Mac 上で拒否される。findings はリポジトリではなく Bromure に届く。
ブラウザは別の VM
エージェントの Chromium はサイドカー VM で動く。サンドボックスからの脱出は Chromium の隣に着地し、コード、キー、Mac からは遠い。
既定で使い捨て
ブラウザのディスクは破棄時に削除されるクローンだ。ペイロードも Cookie もタスクより長くは残らない。
背後には代替品
エージェントの VM にあるのは偽のトークンだ。本物は Mac に残り、本来のホストに向かうときだけ付け加えられる。
PR ごとにレビュー
コードレビューの自動化は、すべてのプルリクエストとコミットをスキャンし、PR のテキストをインジェクション検査にかけ、読み取り専用で動かせる。
パッチを当て、スキャンし、ブラウザに専用のマシンを与える
報告にあるバグはすべて修正済みで、最初の一歩はいつもどおりだ。Chrome を 156 以降に更新し、Apple デバイスを更新し、マルチパス TCP のリスナーを動かすカーネルにパッチを当てる。防御側には、攻撃側がまもなく手にするのと同じモデルが必要であり、まず自分のコードに向けるべきだという Anthropic の指摘は正しい。
報告のより大きな論点は、次に来るバグについてだ。モデルが一握りの欠陥をこれほど速く動作するチェーンに変えられるなら、そのうちのいくつかはパッチが出る前に悪用されるだろう。一日中ブラウズするコーディングエージェントは、いずれそうしたページを読み込む。Bromure Agentic Coding では、そのページは失われる前提で作られた VM の中で読み込まれ、あなたのコード、キー、Mac は別の場所にある。
コーディングエージェント以外で Bromure のブラウザがブラウザのゼロデイにどう対処するかは、ブラウザのゼロデイがなくならない理由を参照してほしい。ダウンロードしたファイルを通じてエージェントに届いた悪意ある指示については、命令を出していたのはダウンロードだったを読んでほしい。