| 項目 | 値 |
|---|---|
| CVE | CVE-2026-9999 |
| ベンダー / 製品 | Google Chrome |
| 影響を受けるバージョン | Chrome < 148.0.7778.216、macOSのみ [1] |
| 修正バージョン | 148.0.7778.216 [1] |
| 影響 | 細工されたHTMLページを介したサンドボックス内部での任意のコード実行 [1] |
| Chromiumの深刻度 | 高 [1] |
| CVSS 3.1(CISA-ADP) | 8.8 HIGH — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H [1] |
| NVD(NIST)のCVSS評価 | 未提供 [1] |
| CWE | CWE-269 — 不適切な権限管理(CISA-ADPによる補完) [1] |
| CISA SSVC(2026-05-29) | exploitation: none、automatable: no、technicalImpact: total [1] |
| 公開日 / 最終更新日 | 2026-05-28 / 2026-07-21 [1] |
| 根本原因 | 非公開 — Chromium issue 513364480 は「Permissions Required」と表示される [1] |
攻撃チェーンへの示唆: 「サンドボックス内部での」コード実行 [1] とは、攻撃者がサンドボックス化されたプロセス(最も可能性が高いのはGPUプロセス)の制御を獲得することを意味します。ブラウザ全体の乗っ取りには、さらにこのCVEの対象とはならない別個のサンドボックスエスケープが必要です。
以下は公開記録からの推測であり、確認された事実ではありません:
したがって、このハーネスはまさにこれらのパターンを実行し、その後GLSLを大規模に変異させてレンダラー側のクラッシュ(WebGLコンテキスト喪失 = GPUプロセスのクラッシュまたはウォッチドッグによる強制終了)を探します。
| ファイル | 用途 |
|---|---|
cve-2026-9999-poc.html | 自己完結型のPoCハーネス(依存関係なし): ビルドのフィンガープリンティング、厳選された8つのトランスレーター負荷テスト用シェーダー、クラッシュ成果物のキャプチャ機能付きGLSLファザー |
README.md | 本ファイル |
GoogleのChrome for Testingアーカイブは、自動更新されないバージョン固定ビルドを提供します。最新の脆弱なビルドを見つけます(148.0.7778.216未満のすべてが影響を受けます [1]):
import json, urllib.request
data = json.load(urllib.request.urlopen(
"https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"))
key = lambda v: tuple(int(x) for x in v.split('.'))
fix = (148, 0, 7778, 216)
cands = sorted((v["version"] for v in data["versions"]
if "chrome" in v.get("downloads", {}) and key(v["version"]) < fix), key=key)
print(cands[-5:]) # pick the last (newest vulnerable) entry
お使いのアーキテクチャ向けにダウンロードします(uname -m):
# Apple Silicon
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-arm64/chrome-mac-arm64.zip
# Intel
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-x64/chrome-mac-x64.zip
ラボ用フォルダ(例: ~/lab/、/Applicationsではない)に解凍し、そこから起動します。
特定のビルドがChrome for Testingにない場合は、コミット位置でインデックス化されたChromiumスナップショットアーカイブ(Intel用は commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/、Apple Silicon用は .../Mac_Arm/)を使用します — chromium-historyを介して脆弱なバージョンをブランチ位置に対応付け、最も近いスナップショットを取得します。スナップショットも自動更新されません。
Keystoneアップデータエージェントを終了し、googleupdate.googleapis.com をブロックします。そうしないと、テストビルドが一晩のうちに静かに自己パッチされてしまいます。Chrome for Testingビルドでは不要です。
Metalがない場合、ChromeはWebGLをソフトウェア(SwiftShader)でレンダリングし、ANGLE Metalバックエンドには一切触れません。PoCページのコンソールで以下を実行します:
const c = document.createElement('canvas'), g = c.getContext('webgl2');
const x = g.getExtension('WEBGL_debug_renderer_info');
console.log(g.getParameter(x.UNMASKED_RENDERER_WEBGL));
// Good: contains "ANGLE Metal Renderer"
// Bad: contains "SwiftShader" -> the vulnerable path is NOT being exercised
chrome://gpu でも確認できます。GPU仮想化を備えたParallels/VMware Fusionゲストは通常動作しますが、最小構成のQEMU/UTMセットアップはSwiftShaderにフォールバックすることがよくあります。
cd <repo dir>
python3 -m http.server 8000
# then browse to http://localhost:8000/cve-2026-9999-poc.html
1) Run curated triggers をクリックします。 8つのシェーダーが§2で説明したトランスレーターパターン(OOB定数インデックス、整数オーバーフローによる配列サイズ、動的マトリックスインデックス、ループアンロール負荷、配列の配列、discard/swizzle、プリプロセッサのエッジケース、過大なUBO)に負荷をかけます。[!!] の結果とコンテキスト喪失イベントに注意してください。2) Fuzz をクリックします。 変異したGLSLシェーダーがコンパイル、リンク、描画、読み戻しされ、それをループします。ログで CONTEXT LOST に注意してください。localStorage に保存されます。次のように取得します:
localStorage.getItem("cve20269999_poc_fs"); // crashing fragment shader
localStorage.getItem("cve20269999_crashes"); // crash event log
疑わしい実行のライブスナップショットは、
chrome://gpuとmacOSコンソール(GPUプロセスクラッシュレポート)でも確認できます。
WEBGL_context_lost ≠ 脆弱性。 ChromeのGPUウォッチドッグは長時間実行されるシェーダーを強制終了します(loop-unroll-dos トリガーと巨大なループ回数を持つファズ反復は遅くなるように設計されています)。ノイズを抑えるには: SH_ITER を減らすか、候補となるクラッシュが迅速に再現することを確認します(反復あたり1秒未満)。EXC_BAD_ACCESS)を示すはずです。AddressSanitizerを使用して脆弱なリビジョンのChromiumをビルドします:
fetch chromium
cd src
git checkout tags/148.0.7778.215 # last tag before the fix
gn gen out/asan --args='is_asan=true is_debug=false symbol_level=1 dcheck_always_on=true'
autoninja -C out/asan chrome
次に、Metal API検証を有効にして、最小化されたクラッシュシェーダーを実行します:
MTL_DEBUG_LAYER=1 out/asan/Chromium.app/Contents/MacOS/Chromium poc.html
ASANトレースは正確なANGLE/Metal関数を特定し、クラッシュがCVEのコンポーネントと一致するかどうかを確認します [1]。
(後続: 148.0.7778.216の修正コミットが公開されたら、third_party/angle/src/libANGLE/renderer/metal/ をdiffして真の根本原因を特定し、ファジングアプローチを決定論的トリガーに置き換えます。)
exploitation: none を記録しています [1]。所有しているマシン、または明示的にテストを許可されたマシンでのみテストしてください。このハーネスは、グラフィックスプロセスをクラッシュさせるために意図的に敵対的なシェーダーをコンパイルします — GPUプロセスの強制終了が発生します。脆弱なブラウザビルドを本番ネットワークに接続しないでください。
[1] NVD — CVE-2026-9999: https://nvd.nist.gov/vuln/detail/CVE-2026-9999 * ベンダー勧告(Chrome Releasesブログ、Stable Channelアップデート): https://chromereleases.googleblog.com/2026/05/stable-channel-update-for-desktop_0877304591.html * Chromium issue 513364480(アクセス制限あり): https://issues.chromium.org/issues/513364480