| フィールド | 値 |
|---|
| CVSS | 8.8(高) |
| CWE | CWE-843(型混同) |
| コンポーネント | V8 JavaScript エンジン -- Maglev/Turbofan インライン sort |
| 影響を受けるバージョン | Chrome < 152.0.7977.82、すべての Chromium ベースのブラウザ |
| 修正済み | Chrome 152.0.7977.82(2026-09-03) |
| 修正コミット | e0562d87ad9c17042b581582c99237d798572e67 |
| CISA KEV | 2026-09-04 追加、期限 2026-09-18 |
| 実環境での悪用 | あり(Google が確認) |
| 報告者 | Salvatore Gulizia(Serotav) |
インライン sort 最適化は、多相的(ポリモーフィック)な要素種別フィードバック(PACKED_SMI_ELEMENTS + PACKED_ELEMENTS)を受け入れます。コンパレータが arr.fill(0) を呼び出すと、V8 はレシーバのマップを PACKED_ELEMENTS から PACKED_SMI_ELEMENTS へ後方移行させます。sort 後のマップチェックは、PACKED_SMI_ELEMENTS が元のフィードバックセットに含まれていたため通過します。コピーバックは、SMI 専用要素を主張するマップを持つ配列にオブジェクトポインタを書き込みます。
この修正では、sort をインライン化する前に、フィードバック内のすべてのレシーバマップが同じ elements_kind を共有することを要求する前提条件が追加されています。
| ファイル | 説明 |
|---|---|
patch-analysis.md | 根本原因、トリガーメカニズム、悪用プリミティブの評価を含む完全なパッチ差分分析 |
patch-analysis.json | 構造化データ:コミットハッシュ、CWE、影響を受けるバージョン、悪用プリミティブ |
v8-research.md | V8 要素種別の詳細、先行 PoC(CVE-2020-6418、CVE-2025-2135、CVE-2024-4947 など)、サンドボックスアーキテクチャ、エスケープ技術 |
poc-minimal.js | d8 用の最小型混同トリガー(d8 --allow-natives-syntax poc-minimal.js) |
poc.html | 完全な悪用チェーン:型混同、addrof プリミティブ、ヒープスプレー、バッキングストア重複による fakeobj、情報漏洩 |
exploit-notes.md | 技術解説:段階的なチェーン、ヒープレイアウト図、ポインタ圧縮、サンドボックスの影響、検出指標、修復 |
# V8 デバッグヘルパーを使用
d8 --allow-natives-syntax poc-minimal.js
# 使用しない場合(String() によるヒューリスティック検証)
d8 poc-minimal.js
Chrome < 152.0.7977.82 で poc.html を開きます。エクスプロイトは自動的に実行され、各ステージをページと開発者コンソールに記録します。ステージ:
arr.fill(0) による型混同トリガーaddrof プリミティブ -- 圧縮されたヒープポインタを整数として漏洩fakeobj -- 制御された整数からオブジェクト参照を偽造トレーニング(2000 回の反復)
|
v
型混同: PACKED_ELEMENTS マップ -> PACKED_SMI_ELEMENTS マップ
(バッキングストアは依然としてオブジェクトポインタを保持)
|
v
addrof: String(confused_array) がポインタを整数として漏洩
|
v
fakeobj: double/object 配列の重複が制御されたポインタを書き込み
|
v
制御された elements ポインタを持つ偽の JSArray -> 任意の R/W(ケージ内)
|
v
V8 サンドボックス内でのコード実行(完全な RCE にはサンドボックスエスケープが必要)
kMaxInlineSortLength)arr.fill() を呼び出す必要がありますPACKED_SMI と PACKED_ELEMENTS の両方の配列を渡す必要があります