
vivo iQOO Neo9S Pro (MT6989) 向けのワンクリック root キット。MCAST トランスポート経由で CVE-2026-43499 futex PI UAF を悪用し、スクリプトと分析ドキュメントを同梱。
vivo iQOO Neo9S Pro(V2339FA、MediaTek MT6989) 向けの GhostLock ワンクリック root キット。 本リポジトリには以下が含まれます:MCAST transport 移植パッチ、ワンクリックスクリプト、完全な解析ドキュメント。完全な実行可能キット(バイナリと KernelSU を含む)は Releases を参照してください。
Device: vivo iQOO Neo9S Pro (V2339FA / PD2339, MT6989) Firmware: PD2339_A_16.2.12.1.W10.V000L1 (Android 16) Kernel: 6.1.145-android14-11-maybe-dirty Vulnerability: CVE-2026-43499 (futex PI requeue UAF) For device owners / security research only. Use on your own device.
setsockopt(SOL_IP, MCAST_JOIN_SOURCE_GROUP, buf, 0x108) の 0x108 バイトのスタックコピー をポイズニングプリミティブとして発見・採用し、stale な rt_mutex_waiter を完全に上書きして全チェーン(W1→W2→W3→KernelSU)を貫通させました。ghostlock-kit-20260913.zip をダウンロードして解凍します。cd <解凍ディレクトリ>\ghostlock-kit
powershell -ExecutionPolicy Bypass -File .\scripts\run-at-lockscreen.ps1 -Reboot
[+] Root 成功! が表示されれば完了です(実行中はスマートフォンのロックを解除しないでください)。確認:adb shell su -c id
# uid=0(root) gid=0(root) groups=0(root) context=u:r:ksu:s0
失敗するとカーネル panic により自動再起動が発生し、スクリプトは自動的に待機して再試行します(成功率は約 25–30%/回。ロック画面のタイミングではほぼ一発で成功)。 root は一時的(KernelSU late-load)であり、スマートフォンの再起動後はスクリプトを再実行する必要があります。
.
├── scripts/
│ ├── run-at-lockscreen.ps1 # ワンクリック:再起動→ロック画面待機→プッシュ検証→実行→自動再試行(推奨)
│ └── retry-if-needed.ps1 # 汎用再試行(強制再起動なし)
├── src/
│ └── ghostlock-mcast.patch # ソースコード変更(ベースライン ghostlock-app @ 50d2b72)
├── docs/ # 解析ドキュメント(エクスプロイトレポート/transport 解析/waiter と PI walk/デバイスマニュアル/トラブルシューティング記録)
└── LICENSE # Apache-2.0(上流を継承)
バイナリと完全なキット(files/ghostlock、files/ksud、files/offsets.json、KernelSU APK)は git リポジトリには含まれていません。
Releases から ghostlock-kit-20260913.zip をダウンロードしてください。
| アセット | 説明 | SHA-256 |
|---|---|---|
ghostlock-kit-20260913.zip | 完全キット(スクリプト+バイナリ+APK+ドキュメント) | df547f6b2852a0d86582958e049ef5a44599a5a91ce0dace2162fb7d0fcab11d |
キット内の主要ファイル(MD5):
| ファイル | MD5 |
|---|---|
files/ghostlock(エクスプロイトプログラム) | e581609ed114d33efa3b8a1958f85637 |
files/ksud(公式 KernelSU v3.3.0 ユーザー空間) |
FUTEX_WAIT_REQUEUE_PI から戻った後も、task->pi_blocked_on がそのスタック上の rt_mutex_waiter を指したまま宙に浮いた状態になります。setsockopt(SOL_IP, MCAST_JOIN_SOURCE_GROUP, buf, 0x108) により do_ip_setsockopt が
memset(0x108) + copy_from_user(0x108) を実行し、コピー範囲 [S'−0x338, S'−0x230) が該当 waiter(waiter はバッファオフセット 0x60 に位置)を完全に上書きします。
buf[8]=0 を設定するとファミリ検証が失敗し、syscall はコピー後にクリーンに戻ります。sched_setattr → rt_mutex_adjust_prio_chain が偽造 waiter を読み取り → rb_erase の left-only relink
により *(target) := value 書き込みプリミティブを形成します。詳細は docs/ を参照してください(証拠チェーン、逆アセンブリ解析、クラッシュ現場を含む)。
# ベースライン:ghostlock-app @ 50d2b72(PR#127 を含む)
git clone https://github.com/YuKongA/ghostlock-app.git
cd ghostlock-app && git checkout 50d2b72
git apply /path/to/src/ghostlock-mcast.patch
make NDK_ROOT=<your-ndk> ghostlock
パッチ内容:MCAST transport(do_mcast_fake_lock_route)、ルート選択、observe/事前構築ロジック、
GHOSTLOCK_WALK_LOG(consumer 側の walk 特定)、root スクリプトの pstore バックアップ、GHOSTLOCK_SKIP_VR。
ksud と APK は公式 v3.3.0 リリースからのもので、著作権はその作者に帰属します本ツールは、デバイス所有者が自身のデバイスに対してローカルなセキュリティ研究および自己使用の root を行うためのものです。未承認のデバイスや違法な用途には使用しないでください。 本ツールの使用によりデバイスが不安定になったりデータリスクが生じたりする可能性があります。各自でバックアップを行い、相応の結果を負担してください。
de059ed8ffd896129a0a4bbe338c946a |
files/offsets.json(本機種のオフセット) | a2498197161b01bdcc5dffc0614fbfbd |
cred = init_cred → W3 で seccomp をクリア(shell フローではスキップ)→ root スクリプトで KernelSU を late-load。| 問題 | 対処 |
|---|
| 失敗後にスマートフォンが再起動する | 正常(確率的事象)。再起動後はロックを解除せず、そのままスクリプトを再実行 |
| マネージャーが「未インストール/未動作」と表示する | まず su -c id が使用可能か確認。マネージャーを開いて更新し、スワイプして閉じたり強制停止したりしない |
| root が再起動後に消える | 正常(late-load は非永続)。スクリプトを再実行 |
| ReSukiSU を使いたい | 本機では使用不可(マネージャーを開くと即ハングして再起動)。必要なら別途適合バージョンを用意 |
| システムアップデート後 | offsets.json が無効になる可能性があるため、再生成/再インポートが必要 |