
Pixelデバイスのroot取得を支援するCVEリサーチとエクスプロイト
ロックされたブートローダーのままの純正Google Pixelを、非特権のadb shellからカーネルCVEを使ってroot化する — アンロックもフラッシュもベンダーの協力も不要。
ユーザー空間から到達可能なカーネルバグが、短命な読み書きプリミティブを生み出す。そのプリミティブは、実行中のGKIカーネルにKernelSUモジュールをレイトロードするために使われ、その後rootは既にインストールされているKernelSUマネージャーに引き渡される。パーティションへの書き込みは一切行われないため、再起動がそのままアンインストールとなる。すべてはホストからadb経由で、単一の実行ファイル./pixel-ksu-rootを通じて実行される。
| CVE | バグ | 現状 |
|---|---|---|
| CVE-2026-43499 — GhostLock | futexのPIウォークが、remove_waiter()が宙に浮かせたままにしたrt_mutex_waiterを追跡し、pselect(2)が再び占有したスタック領域から読み出す | root化成功、ハードウェア検証済み。defaultレシピであり、素の実行でこれが使われる |
| CVE-2026-43049 — FFWheel | hidpp_probe()がフォースフィードバック初期化の前にinputデバイスを公開し、hid_hw_stop()を呼ばずにエラーを返すため、解放されたstruct uhid_deviceが/dev/input/eventNを通じて到達可能なまま残る | root化成功、ハードウェア検証済み。非特権シェルからのuse-after-freeで任意のカーネル読み書きを実現し、その後自身のcredをその場で上書きする |
| CVE-2026-93189 — Joyride | hid_hw_stop()がinputの停止を待たないため、probe失敗時にhidraw_report_event()が別プロセッサ上でまだ書き込み中のstruct hidrawを解放してしまう | 後継候補。解放への経路は非特権シェルから/dev/uhidを通じてハードウェア上で辿られており、上記の2つのチェーンを塞いだビルドでも開いている |
| CVE-2026-46242 — BadEpoll | __ep_remove()がfile->f_epをクリアした後もそのファイルを使い続けるため、並行する__fput()がまだ書き込み中のeventpollを解放してしまう | 部分的。読み書き両チェーンは端から端まで動作するが、slab境界を越えた配送が未解決 |
| CVE-2026-56945 — RogueWave | bigo_iommu_fault_handler()が、呼び出し元に関する文書化された誤った仮定のもと、ロックなしでドライバーグローバルなインスタンスリストを辿る | 公開AMediaCodec APIを通じて特権なしで到達可能。フォールトハンドラ自体にはまだ到達していない |
| CVE-2026-56914 — DirtyDock | gcip_iommu_mapping_unmap_buffer()が、ロック付きの亜種ではなくロックなしのset_page_dirty()でピン留めされたDMAページをダーティにし、背後のメモリの破棄と競合する | 端から端までトリガー可能だが、デバイスノードは特権で制限されている。2つの競合戦略は否定され、タイミングはまだ制していない |
| CVE-2026-64468 — Frostbind | binder_free_transaction()が参照を保持せずにt->to_procを逆参照する | ハント。脆弱な読み出しは動作するが、ベアメタル上で競合に敗れる |
| CVE-2026-64469 — Frostwalk | Frostbindの兄弟で、同じ関数内: binder_free_transaction()のロックなし読み出しが、別のスレッドのtransaction_stackを辿るbinder_thread_release()と競合する | ハント。解放とウォークの両方が到達可能と確認され、メカニズムにroot依存はない — Shizukuと同じ方法でアプリプロセスに到達する。verify-readなしの回収試行(フラッド+ピン)はまだ成功していない — 書き込みの実際のターゲットは依然として特定されていない |
| CVE-2026-64560 — Zombietick | de_thread()が->sighandをnullにした後、posix_cpu_timer_del()が早期リターンするため、プロセス全体のPOSIX CPUタイマーがキューに入ったまま解放される | ハント。KASLR段階は成功するが、ブリッジディスクリプタが検証されない |
| CVE-2026-49881 — Telecom | Telecomが呼び出し元が指定したコンポーネント名を信頼し、CONTEXT_INCLUDE_CODEでロードするため、おとりアプリがsystem_server内で任意のJavaを実行できる | 研究。カーネルバグではなくユーザー空間のドメインピボットであり、domainprobe/と組み合わせる |
| P0 465827985 — StackJump | stack-clash保護なしでビルドされたネイティブコードにより、大きなフレームがsystem_serverスレッドのガードページを踏み越える | オーバーフローは再現し、binderスレッドを確実にクラッシュさせる。報告者のスプレーベースの書き込みは再現しないため、実現されるプリミティブはクラッシュのtombstoneの読み出しである — そのプロセスに対する完全なASLRの無効化 |
| CVE-2026-28594 — SealSlip | シールされていないmemfdがashmemが期待される場所で受け入れられるため、コンシューマーが保持している間もそのサイズが可変のままになる | 非特権呼び出し元にとってはサービス拒否のみで、SELinuxによって制限される。計測器として保持 |
| CVE-2026-28662 — CookieJar | Wi-Fi Directのクッキーが下限チェックのみで固定バッファにコピーされ、wpa_supplicantのヒープをオーバーフローさせる | 文書化済み、追跡せず。第一段階の候補 |
| CVE-2026-43284 — DirtyFrag | esp_input()がその場で復号するため、シーケンスワードの格納がハッシュチェックの前に、フラグメントがピン留めした任意のページキャッシュページに書き込まれる | クローズ。未パッチだが、skb_orphan_frags_rx()が先にフラグメントをコピーするため、どの特権でも悪用不可能 |
root化に至るチェーンはCAP_SUの引き渡しで終わる。至らないチェーンはハントである: ランナーは成功を報告するのではなく、各ショットを分類してアーカイブする。これにより、エクスプロイトがまだ推測的な段階でもバグが有用であり続ける(runner/README.md §2.3)。チェーンがdefaultレシピを取る前に実証すべきことはcves/README.mdに記されている。