
GhostLock (CVE-2026-43499) は RootMyVivo Neo 向けのエクスプロイトフォーク — iQOO Neo 11 (PD2520, SM8750, 6.6.89)。自身のデバイスでの許可された研究のみを目的としています。
boxiaolanya2008/CVE-2026-43499-Neo11Plus のフォークで、RootMyVivo 向けに作り直したもの。ルート化後に端末を壊す要素はすべて取り除き、検証済みのタイミングを備えたエクスプロイト本体のみを残している。
| ディレクトリ | デバイス | カーネル | オフセットの出所 |
|---|---|---|---|
PD2520-BP2A.250605.031.A3 | iQOO Neo 11 | 6.6.89 | 自身の boot.img の kallsyms+BTF、実機で検証済み |
PD2520-A-16.0.28.2 | iQOO Neo 11 | 6.6.127 | boot_b の kallsyms |
I2401-16.1.22.2 | iQOO 13 (India) | 6.6.89 | AmarnathCJD/IQOO13-Root |
PD2426-BP2A.250605.031.A3 | iQOO Neo10 Pro | 6.6.89 (gf2) | sgswzglwlx/vivo-root-build |
PD2415-BP2A.250605.031.A3 | vivo X200 | 6.6.89 (b57) | xiaohj233/ghostlock-x200-root — 同じバイナリが b57 上の Neo10 Pro にも適合 |
PD2405-AP3A.240905.015.A1 | vivo X200 Pro | 6.6.89 | CyberMeowfia |
新しいデバイス = src/targets/ に新しいディレクトリを追加: target.h(オフセット)+ root.c(検証済みの最終版をそのままコピー)。
| コンポーネント | 理由 |
|---|---|
| 壁紙の変更 + system_server の kill | 「勝手な」ソフトリブートや壁紙の差し替えの原因 |
| ポート 39555 の io デーモン | デバッグ用 kernelapp にしか必要なかった |
| /apex/com.android.virt への tmpfs オーバーレイ | ソフトリブート時に zygote をハングさせた(黒画面) |
| Boot サービス 10-neo11-su.sh | 固定化はアプリ側で行う |
| 他デバイスのオフセットテーブル | 現在はターゲットごとのディレクトリで自前管理 |
エクスプロイト本体(futex PI UAF → pselect fake lock → heap spray → pipe physrw → root)と posture(panic_on_oops=0、kptr_restrict、AVC 汚染)は変更していない。
upstream に加えて以下を追加: safety_quiesce(PI ルートの前に loadavg < 4 を待つ)、cred-guard(書き込み前にアドレスの正規性を検証)、最大 3 回の新規 fork でのリトライループ。環境変数による調整: RMV_ATTEMPTS、RMV_RETRY_DELAY。
そもそもなぜパニックが起きるのか: INIT_STACK_ALL_ZERO がスタックを上書きして fake waiter を破壊する — quiesce+retry で対処。reclaim 失敗後の不正なターゲット — cred-guard で対処。ストックの panic_on_oops=1 — posture がルート直後に無効化するが、それまでは慎重さだけが頼り。
Windows、NDK r29:
build_ports.bat # все порты
build_ports.bat I2401-16.1.22.2 # одна цель
build-win.bat # PD2520 6.6.89
Termux を使えばデバイス上でも可能です — Makefile を参照してください。
出力: build/<target>/bin/preload.so(約140 KB)。実行: shell ドメインから LD_PRELOAD=$PWD/preload.so /system/bin/true。
すべて P0_PHYS_OFFSET と P0_KERNEL_PHYS_LOAD から P0_DATA_ALIAS_CONST を介して自動計算されます。Qualcomm SM8750: 0x80000000/0xa8000000。MediaTek Dimensity 9400: 0x80000000/0x80000000。値が誤っていてもパニックは発生しません — スライドが単に一致しなくなるだけです。
CVE は 6.1.175 / 6.6.140 / 6.12.86 で修正済みです。ただし互換性はバージョンだけで決まるわけではありません: do_futex のスタック上の rt_mutex_waiter の位置は PGO/LTO ビルドに依存します。詳細な分析は JoinChang/ghostlock-oneplus を参照してください: OPLUS 6.1 では do_futex がインライン化されるためエクスプロイトは不可能ですが、vivo 6.1 では有効です。移植に取り組む前に、フレームを確認してください。
認可された調査および自身のデバイスに限ります。