Google Chrome RCE Vulnerability Details Released Along with Exploit Code
2025/10/06 CyberSecurityNews — Google Chrome の V8 JavaScript engine に存在する、深刻なリモート・コード実行 (RCE) 脆弱性に関する技術的詳細と PoC エクスプロイト・コードを、研究者たちが公開した。この脆弱性は、WebAssembly の型正規化プロセスに存在し、 Chrome M135 以降のコミット 44171ac で混入した、CanonicalEqualityEqualValueType 関数における不適切な null 許容 (nullable) のチェックに起因する。

この脆弱性は、ref t0 と ref null t0 を区別できないため、この欠陥を突く攻撃者は、同一の MurmurHash64A ハッシュ値で衝突する2つの再帰的型グループを作成できる。この構造の不一致を悪用した、型正規化に対するバースデー攻撃を仕掛けることで、このエクスプロイトはインデックス付き参照型における null 許容 (nullable) の混同を引き起こし、Wasm のコアとなる型の安全性の保証を損なうことになる。
このエクスプロイトで採用されたのは、M137 で導入された JavaScript Promise Integration (JSPI) の状態切り替えにおける欠陥を悪用する、新たな V8 サンドボックス・バイパス手法である。
SSD Secure Disclosure によると、セカンダリ・スタック管理ロジック内の状態の不整合を悪用する攻撃者は、ネストされた JS スタックと Wasm スタック間で、順序を無視した実行の切り替えを行う。
この手法は、非アクティブなスタックをスキップし、攻撃者が制御する値を中断されたフレームにスプレーすることで、スタックを完全に制御するものだ。さらに攻撃者は、RWX シェルコード・バッファ上で VirtualProtect を呼び出すための ROP チェーンを構築する。
Chrome RCE 脆弱性エクスプロイト
公開された PoC エクスプロイト・コードは、HTML ペイロードと “wasm-module-builder.js” を用いることで、カスタムの Wasm 型と関数を生成する付随の JavaScript で構成される。エクスプロイトを展開する手順は、以下のとおりである。

続いて、”http://127.0.0.1:8000/exp.html” にアクセスする。この攻撃が成功すると、細工した ROP チェーンと RWX シェルコードを介して Windows の “calc.exe” が起動し、エクスプロイト・スクリプトにより以下の手順が実行される。
まず、null 化の可能/不可能のみが異なる、2つの Wasm 再帰型グループ (t2null/t2nonnull) を列挙し、2^32 個の MurmurHash64A 値に対するバースデー攻撃を行い、衝突箇所を特定する。
次に、ref null t1 を ref t1 にキャストし、大規模な ArrayBuffer への範囲外アクセスを悪用することで、サンドボックス化された制限付き Read/Write プリミティブを獲得する。
さらに、ネストされた Promise ベースの Wasm エクスポートを構築して、スタック切り替えを強制し、コミット c6426203 で欠落している SBX_CHECK を悪用する。それにより、非アクティブなスタックフレームがスキップされ、攻撃者が制御する実行コンテキストが生成される。
最後に、ガジェット・アドレス (pop rax/jmp rax/VirtualProtect スラントオフセットなど) による retsled 配列をスプレーし、シェルコード・メモリを実行可能にマークして、そこへジャンプする。
この発見とエクスプロイトの功績は、TyphoonPWN 2025 の Chrome RCE 部門優勝者である Seunghyun Lee (0x10n) に帰属する。この報告を受け、null 許容 (nullable) の回帰に対処する一方で、JSPI に厳密な SBX_CHECK を再導入して V8 エンジンの型安全性を回復するパッチがコミットされた。
この重大な RCE リスクを軽減するために、ユーザーに対して強く推奨されるのは、 Chrome M137.0.7151.57 (またはそれ以降) へと、可能な限り早急にアップデートすることだ。
高度な技術詳細のようですが、WebAssembly の型正規化で null 可否の不適切な判定により、同一ハッシュ値を狙うバースデー衝突で型の不整合を作り出してしまうようです。それに加えて、JSPI (JavaScript Promise Integration ) のスタック切替における状態の不整合を突く手法で、非アクティブなスタックを飛ばして攻撃者制御の実行コンテキストを注入できるとも記されています。その結果として、サンドボックスを乗り越えた RWX/ROP ベースのリモート実行に結び付くようです。Chrome M137 という、普通とは異なるバージョン表記と、CVE-N/A という状況があり、対象を明確にできませんでいた。辿っていくと、Chromium の Multi-Instoller という感じもします。よろしければ、Chromium で検索も、ご参照ください。
You must be logged in to post a comment.