
GhostLock (CVE-2026-43499) は RootMyVivo Neo 向けのエクスプロイトフォーク — iQOO Neo 11 (PD2520, SM8750, 6.6.89)。自身のデバイスでの許可された研究のみを目的としています。
boxiaolanya2008/CVE-2026-43499-Neo11Plus のフォークで、 RootMyVivo Neo 向けに作り直したもの: 我々のシナリオに不要なものはすべて削除し、 検証済みのエクスプロイトカーネルはタイミングを変更せずそのまま残した。
| コンポーネント | 理由 |
|---|---|
| 壁紙の変更 + system_server の kill | ルート後に「自然発生する」ソフトリブートと壁紙変更の主な原因 |
| io デーモン (ポート 39555) | デバッグ用 kernelapp にのみ必要だった; アプリは su 経由で動作する |
| /apex/com.android.virt/bin への tmpfs オーバーレイ | ソフトリブート時に zygote/system_server をハングさせる可能性があった (黒画面) |
| adbd の mount-namespace への su インストール | アプリは /data/local/tmp/su をフルパスで呼び出す |
| ブートサービス 10-neo11-su.sh | 永続化はアプリが行う: persist.adb.tcp.port + adb_keys + ksud |
| 他デバイスのオフセットテーブル | PD2520-BP2A.250605.031.A3 のみ |
| kernelapp (app/) | アプリの機能で置き換え |
panic_on_oops=0、panic_on_warn=0 (パニック対策)、
kptr_restrict/dmesg_restrict、AVC ポイズニング (policycap を壊さない permissive)/system/bin/su が出現した際のフォワーディングエクスプロイトは /data/local/tmp/su (0755、root:root、system_file コンテキスト)
を配置し、ソケット /data/local/tmp/temp_su.sock でデーモンを起動する。
アプリは su をフルパスで呼び出す — /apex には一切触れない。
cd exploit
PATH=/data/data/com.termux/files/usr/bin:$PATH \
make HOST_CLANG=/data/data/com.termux/files/usr/bin/clang \
NDK_ROOT=/root/android-sdk/ndk/26.1.10909125
build/PD2520-BP2A.250605.031.A3/bin/preload.so (~140 KB)
および build/embed/su_daemon_aarch64_pie (su、~11 KB)6.6.89-android15-8-g1f71897ac249-abogki467805059-4k (オフセットは
この boot.img の kallsyms+BTF 由来; カーネル変更 = target.h の再生成)cd /data/local/tmp/rmv && LD_PRELOAD=$PWD/preload.so /system/bin/trueRMV_ATTEMPTS=N — 完全試行回数 (デフォルト 3)RMV_RETRY_DELAY=N — 試行間の待機秒数 (デフォルト 8)NEO11_* — upstream の調整項目 (delay/nice/attempts) は保持| メカニズム | 動作 | 防御対象 |
|---|
| safety_quiesce | PI ルートの前に loadavg < 4 を待つ (最大 10 秒) | 他フレーム内の waiter → 高負荷時の panic |
| cred-guard | cred 書き込み前にポインタが正規のカーネルアドレスか検証 | ゴミポインタの書き込み → task_struct の即時破壊 → panic |
| retry ループ | 最大 3 回の完全実行 (各回は新しい fork 内) を 8 秒間隔で | タイミングの運任せ: 2 回目で成功することが多く、upstream は諦めていた |
| 適応スピン | consumer スレッド: 200 回 yield → nanosleep(0.2 ms) | エクスプロイト全体を通しての CPU 100% 使用 |