
完全なFirefoxチェーン: CVE-2026-2796 wasm型混乱 -> コンテンツプロセスRCE、さらにCVE-2026-2768 親プロセスエスケープ分析 (いずれもFirefox 148で修正済み)
Firefox のフルチェーン悪用研究: レンダラープロセスでのコード実行のための WebAssembly 型混乱 (type confusion) を、サンドボックスエスケープのための親プロセスバグへ連鎖させる。いずれのバグも Firefox 148 (MFSA-2026-13) で修正済み。ここでのターゲットは、両方の修正に先行する Firefox 148-nightly ツリー @ 2fbc0748c4 (2026-01-14)。
page loads crafted wasm module
│
CVE-2026-2796: Function.prototype.call.bind unwrap skips signature check
│ → i64 ↔ (ref $t) confusion → addrOf/fakeobj
│ → fake WasmArrayObject → arbitrary R/W in the CONTENT process
│ → forged WasmFuncRef → hijack call target ([funcref+0x38])
▼
native code exec INSIDE the sandboxed content process (sbLevel 3)
│ (sandbox blocks exec/fork — need a parent bug)
▼
CVE-2026-2768: forge IndexedDB add/put IPC with out-of-range
mAutoIncrementKeyOffsets (ParamTraits<Key> validates nothing)
│ → parent writes 8 bytes at attacker-controlled offset
▼
memory corruption in the UNSANDBOXED parent process = full escape
| Demo | Where | Result |
|---|---|---|
poc/shell/poc-crash.js | js shell | funcref としてデリファレンスされた 0xDEADBEEF → 0xdeadbf2f で SIGSEGV |
poc/shell/poc-addrof.js | js shell | 任意 R/W のセルフテストが成功 |
poc/shell/poc-forge.js | js shell | PC 制御: 仕込んだカナリアでクラッシュ |
poc/shell/poc-rce.js | js shell | system("id > /tmp/CVE-2026-2796-PWNED; open -a Calculator") — ファイルに uid=501(sid) ... が含まれ、Calculator が起動する |
poc/browser/stage1-browser.html | Nightly (sbLevel 3 content) | サンドボックス化されたタブ内で任意 R/W。偽造した funcref が 0x4141414141414141 へジャンプ → タブはクラッシュするが親プロセスは生存 |
poc/browser/stage1-browser-cmd.html | Nightly (sbLevel 3 content) | XUL ベースをリークし、posix_spawnp (0x187xxxxx) を解決して /bin/sh -c "touch /tmp/PWNED-FROM-CONTENT" で呼び出す → macOS サンドボックスが exec を拒否: ファイルは作成されず、ページにも影響なし — コンテンツ RCE だけではコマンド実行にならないことの証明 |
poc/browser/sandbox-proof.html | Nightly (sbLevel 3 content) | サンドボックスルール内でのネイティブ実行: getpid() がタブの実 PID を返し (ps と一致)、生の libc write(1, ...) がブラウザのターミナルログに出力される — fork/exec なし、ファイルオープンなし |
poc/browser/fd3-proof.html | Nightly (sbLevel 3 content) | fd 3 (親プロセスの IPDL ソケット) に生の 32 バイトを書き込む: 親プロセスの IPC パーサーが攻撃者製バイトを消費し (Message needs unreceived descriptors ... num_handles:33)、メッセージを破棄してタブを強制終了する ("Exiting due to channel error") — ステージ 2 が整形式だが悪意ある IndexedDB メッセージで兵器化するトランスポートプリミティブ |
poc/browser/stage2-trigger.html | Nightly | 親プロセスのバグ経路への純 JS での到達可能性 (オートインクリメントインデックスキー [1,2,3,4]) |
ステージ 2 の根本原因分析 (修正差分、IPC シリアライゼーション、悪用戦略) については docs/full-escape.md を参照。
# Tree: mozilla-firefox/firefox @ 2fbc0748c4 (2026-01-14, pre-FF148)
# 1) js shell (stage-1 development, unsandboxed):
cd js/src && ../../configure --enable-debug --enable-optimize \
--without-intl-api --enable-project=js && cd _obj && make -j8
# 2) full browser (stage 2). mozconfig:
# export CC=/usr/bin/clang ; export CXX=/usr/bin/clang++
# ac_add_options --enable-application=browser
# ac_add_options --disable-debug --enable-optimize
# ac_add_options --disable-crashreporter --disable-updater --disable-tests
# ac_add_options --enable-sandbox
# ac_add_options --without-wasm-sandboxed-libraries
# requires: node, cbindgen, rustc >= 1.87, macOS CLT SDK
# local build notes:
# - private header sys/fileport.h shim added to objdir dist/include/sys/
# - one compile guard added: NSGlassEffectView (macOS 26 SDK symbol) wrapped
# in #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000 in widget/cocoa/
# nsCocoaWindow.mm (build-environment fix, no security impact)
ブラウザ PoC の実行: browser.dom.window.dump.enabled=true を設定したプロファイルで obj-browser/dist/Nightly.app を起動し、file:// 経由で HTML ファイルを開き、stdout の dump() 出力を確認する。タブのクラッシュは親プロセスのログに process <pid> exited on signal 10 として現れる。
WasmArrayObject: numElements @+16、data ポインタ @+24、インラインデータ @+40。WasmFuncRef: typeDef ポインタ @+0x40、呼び出しターゲット @+0x38。JSFunction ネイティブポインタ @+0x20。js shell: os_system @ base+0x1a9f8、system GOT @ base+0x11d47b0。ブラウザ: WebIDL ネイティブコードポインタ (console.log JSFunction +0x20) から 0xfeedfacf の Mach-O マジックまで逆方向にスキャンして XUL ベースを特定。_posix_spawnp GOT @ XUL+0x9bb7d30、_getpid GOT @ XUL+0x9bb7600、_write GOT @ XUL+0x9bb87e0。偽造配列のウィンドウはアウトオブライン (malloc された) 配列内に置く必要がある — インライン/nursery オブジェクトは長時間のスキャン中に GC によって移動される。
CVE-2026-2796 によるレンダラープロセスでのコード実行は (シェルとブラウザの両方で) 完全に実証されている。CVE-2026-2768 のサンドボックスエスケープ分析は修正差分に対してソースコードレベルで検証済み。実際のエンドツーエンドの親プロセス破壊トリガーは作業中である (docs 参照)。この研究は防御・教育目的のためのものであり、これらの脆弱性は現在のリリースで修正済みである。
e2acef67c5dea6ecセキュリティ研究、教育、防御的テストのみを目的とする。所有していないシステム、または明示的なテスト許可を得ていないシステムに対して使用しないこと。