Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-9999-exploit — Chrome の ANGLE/Metal WebGL バックエンドにおける CVE-2026-9999 向けの概念実証 (PoC) 兼 GLSL ファザーです。ビルドのフィンガープリント取得、厳選されたシェーダー、クラッシュ成果物のキャプチャ機能を備えています。 | Kitploit
ツール/GitHubGitHub/josephfarah-ciso/cve-2026-9999-exploit
脆弱性分析エクスプロイトウェブセキュリティファジング
GitHubjosephfarah-ciso/cve-2026-9999-exploit

CVE-2026-9999-exploit

Chrome の ANGLE/Metal WebGL バックエンドにおける CVE-2026-9999 向けの概念実証 (PoC) 兼 GLSL ファザーです。ビルドのフィンガープリント取得、厳選されたシェーダー、クラッシュ成果物のキャプチャ機能を備えています。

リポジトリを見る

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
7日前未レビュー

CVE-2026-9999 — Chrome ANGLE/Metal WebGL PoC 探索ハーネス(macOS)


1. 脆弱性の概要

項目値
CVECVE-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]
CWECWE-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の対象とはならない別個のサンドボックスエスケープが必要です。


2. 戦略と仮説(アナリスト自身の評価 — 未確認として扱うこと)

以下は公開記録からの推測であり、確認された事実ではありません:

  • ANGLEは、ChromeがWebGLのGLSLをプラットフォームのグラフィックスAPI(macOSではMetal)に変換するために使用するエンジンです。「細工されたHTMLページ」[1] がANGLEに到達するということは、ほぼ確実にWebGLコンテンツ、つまりMetalバックエンドが処理する攻撃者制御のシェーダーやWebGL状態を意味します。
  • CWE-269(不適切な権限管理)[1] とサンドボックス内に限定された影響を組み合わせると、ANGLE/GPUレイヤーがシェーダー変換または状態検証中に、攻撃者制御の何かを適切に制約できていないことが示唆されます。
  • 歴史的に、このコンポーネントはGLSLトランスレーターのエッジケース(OOB定数インデックス、整数オーバーフローによる配列サイズ、swizzle/discardの相互作用、過大なユニフォームブロック、ループアンローリングの爆発)を通じてメモリ安全性のバグを引き起こしてきました。

したがって、このハーネスはまさにこれらのパターンを実行し、その後GLSLを大規模に変異させてレンダラー側のクラッシュ(WebGLコンテキスト喪失 = GPUプロセスのクラッシュまたはウォッチドッグによる強制終了)を探します。


3. リポジトリの内容

ファイル用途
cve-2026-9999-poc.html自己完結型のPoCハーネス(依存関係なし): ビルドのフィンガープリンティング、厳選された8つのトランスレーター負荷テスト用シェーダー、クラッシュ成果物のキャプチャ機能付きGLSLファザー
README.md本ファイル

4. 要件

  • 意図的にクラッシュさせることを許可されたmacOSマシンまたはMetal対応VM。このCVEはmacOS固有です [1]。Windows/Linuxでのテストでは、脆弱なANGLE Metalバックエンドは実行されません。
  • Chromeビルド < 148.0.7778.216 [1](§5を参照)。
  • ハードウェアGPU / Metalサポート。 これがない場合、ChromeはSwiftShader(ソフトウェアレンダリング)にフォールバックし、脆弱なパスに到達することはありません — §5.4の確認を参照。
  • Python 3(任意。§5.1のバージョン検索ヘルパーとローカルHTTPサーバーのみに使用)。

5. 環境構築

5.1 方法A — Chrome for Testing(推奨)

GoogleのChrome for Testingアーカイブは、自動更新されないバージョン固定ビルドを提供します。最新の脆弱なビルドを見つけます(148.0.7778.216未満のすべてが影響を受けます [1]):

root@kitploit:~
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):

root@kitploit:~
# 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ではない)に解凍し、そこから起動します。

5.2 方法B — Chromiumスナップショット

特定のビルドがChrome for Testingにない場合は、コミット位置でインデックス化されたChromiumスナップショットアーカイブ(Intel用は commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/、Apple Silicon用は .../Mac_Arm/)を使用します — chromium-historyを介して脆弱なバージョンをブランチ位置に対応付け、最も近いスナップショットを取得します。スナップショットも自動更新されません。

5.3 自動更新のブロック(別のソースからブランドビルドを使用する場合のみ)

Keystoneアップデータエージェントを終了し、googleupdate.googleapis.com をブロックします。そうしないと、テストビルドが一晩のうちに静かに自己パッチされてしまいます。Chrome for Testingビルドでは不要です。

5.4 Metalバックエンドで動作していることを確認する(重要)

Metalがない場合、ChromeはWebGLをソフトウェア(SwiftShader)でレンダリングし、ANGLE Metalバックエンドには一切触れません。PoCページのコンソールで以下を実行します:

root@kitploit:~
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にフォールバックすることがよくあります。


6. 再現手順

  1. ターゲットを隔離する。 VMスナップショットまたは専用のmacOSアカウントを使用します。脆弱なビルドではサインインや同期の有効化を決して行わないでください。設計上、侵害されているものとして扱います。(このCVEの影響は、Webページにアクセスするだけでサンドボックス内でコード実行が発生するというものです [1]。)
  2. 脆弱なビルドをインストールし(§5に従う)、§5.4が合格することを確認します。
  3. PoCを配信する(ファイルを直接開くか、以下のいずれか):
    root@kitploit:~
    cd <repo dir>
    python3 -m http.server 8000
    # then browse to http://localhost:8000/cve-2026-9999-poc.html
    
  4. ロード時に表示されるフィンガープリント行を確認します。 ビルドが148.0.7778.216より前であること、したがって脆弱である可能性があることを報告するはずです [1]。パッチ適用済みビルドでは、無駄なサイクルを費やさないようにハーネスが警告します。
  5. 1) Run curated triggers をクリックします。 8つのシェーダーが§2で説明したトランスレーターパターン(OOB定数インデックス、整数オーバーフローによる配列サイズ、動的マトリックスインデックス、ループアンロール負荷、配列の配列、discard/swizzle、プリプロセッサのエッジケース、過大なUBO)に負荷をかけます。[!!] の結果とコンテキスト喪失イベントに注意してください。
  6. 2) Fuzz をクリックします。 変異したGLSLシェーダーがコンパイル、リンク、描画、読み戻しされ、それをループします。ログで CONTEXT LOST に注意してください。
  7. クラッシュ時には、問題のシェーダーが localStorage に保存されます。次のように取得します:
    root@kitploit:~
    localStorage.getItem("cve20269999_poc_fs");      // crashing fragment shader
    localStorage.getItem("cve20269999_crashes");     // crash event log
    
  8. クラッシュするシェーダーを最小化して単独で再テストし(5回以上の連続実行)、決定性を確認します。
  9. CVE-2026-9999に帰属させる前に、ASANビルドで根本原因を確認します — §8を参照。

疑わしい実行のライブスナップショットは、chrome://gpu とmacOSコンソール(GPUプロセスクラッシュレポート)でも確認できます。


7. 結果の解釈 / 既知の誤検知

  • WEBGL_context_lost ≠ 脆弱性。 ChromeのGPUウォッチドッグは長時間実行されるシェーダーを強制終了します(loop-unroll-dos トリガーと巨大なループ回数を持つファズ反復は遅くなるように設計されています)。ノイズを抑えるには: SH_ITER を減らすか、候補となるクラッシュが迅速に再現することを確認します(反復あたり1秒未満)。
  • 実際のメモリ安全性クラッシュは、最小化されたシェーダーから決定的に再現し、ウォッチドッグによる終了ではなく、コンソールに明確なクラッシュシグネチャ(例: EXC_BAD_ACCESS)を示すはずです。
  • ANGLE Metalバックエンドを特定するASANレポートのみが、無関係なドライバーの不具合ではなくこのバグを発見したことの確固たる証拠です。

8. 根本原因の確認: ASANビルド(任意だが強く推奨)

AddressSanitizerを使用して脆弱なリビジョンのChromiumをビルドします:

root@kitploit:~
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検証を有効にして、最小化されたクラッシュシェーダーを実行します:

root@kitploit:~
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して真の根本原因を特定し、ファジングアプローチを決定論的トリガーに置き換えます。)


9. 制限事項

  • 公開された根本原因やPoCは存在しません。 Chromiumのissueは制限されています(「Permissions Required」)[1]。このハーネスは仮説駆動型です。
  • 既知の実地悪用(in-the-wild exploitation)はありません。 CISAのSSVC補完(2026-05-29)は exploitation: none を記録しています [1]。
  • サンドボックス内に限定された影響のみ [1] — このPoCは、たとえコード実行を生み出したとしても、実際の攻撃チェーンのサンドボックス化プロセス段階のみを対象としています。
  • macOSのみが対象です [1]。他のプラットフォームでの実行から結論を導き出さないでください。

10. 安全性と法的注意

所有しているマシン、または明示的にテストを許可されたマシンでのみテストしてください。このハーネスは、グラフィックスプロセスをクラッシュさせるために意図的に敵対的なシェーダーをコンパイルします — GPUプロセスの強制終了が発生します。脆弱なブラウザビルドを本番ネットワークに接続しないでください。


11. 参考情報

[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

ツールをダウンロード