
Redmi K50G/POCO F4 GT向けのCVE-2026-43499(futex UAF)を利用したローカル権限昇格エクスプロイトで、一時的なrootを取得し、ブートローダーのロック解除なしでKernelSUをロードします。
免解锁 BL 一键临时 Root。利用 GhostLock(CVE-2026-43499, futex PI Use-After-Free) 本地提权链拿到 root 锚点,随后通过 KernelSU 3.3.0 late-load 方式把 kernelsu 模块挂载进运行中的内核,配合 KSU 模块保持 SELinux Permissive 并修复网络。
対象デバイス: Redmi K50G / POCO F4 GT —— コードネーム
ingres、SoC SM8450 (Snapdragon 8 Gen 1) システム: Android 14、UKQ1.240624.001、カーネル 5.10.209-android12 (KMIandroid12-5.10) 状態: ✅ 実機で一時 Root の成功を検証済み
| ファイル | 役割 |
|---|---|
exploit | GhostLock 権限昇格バイナリ(ARM64 PIE、未 strip)。内部に KernelSnitch の mm 衝突特定、futex PI UAF によるスタック上書き、カーネルアンカーの root、su デーモン、埋め込み libksud.so と KSU late-load ロジックを含む |
Root-K50G.bat | Windows ワンクリックスクリプト(自身のディレクトリを基準にファイルを特定、ダブルクリックで使用可能): デバイス検出 → ファイル転送 → 権限昇格の実行 → 直接 root shell へ |
ksu_loader.sh | root 化されたカーネルアンカーから実行: libksud.so late-load --kmi 5.10.209-android12 で KernelSU をロードし、順に post-fs-data / services / boot-completed の各段階を発火する |
ksu-module/chuxin_permissive_netfix/ | KernelSU モジュール(module.prop + service.sh): 2 秒ごとに enforce=0 を監視し、改ざん防止属性をリセット、netd を再起動、wifi/データ通信を有効化してネットワーク切断を修復する |
adb/ | 内蔵 adb ツール(ポータブル・インストール不要) |
adb驱动无需重启.exe | Xiaomi ドライバのワンクリックインストールツール |
チェーン全体は 4 つのステップに分かれる:
FUTEX_WAIT_REQUEUE_PI + FUTEX_CMP_REQUEUE_PI)でカーネルスタック上に宙に浮いた rt_mutex_waiter を生成する;rt_mutex_adjust_prio_chain の走査をトリガーし、制御されたカーネル読み書きプリミティブを得る。cred(uid/gid=0、完全な caps、kernel SID)を注入し、root アンカープロセスを得る(実行ログの anchor: ROOT uid=0);SHELL_ROOT=1)と su デーモン(SU_DAEMON=1、/data/local/tmp/su)。kernelsu.ko を libksud.so late-load --kmi 5.10.209-android12 で稼働中のカーネルにロードする(書き換え/ブートイメージへのパッチ不要、デバイスの現在の KMI と正確に一致);ksu_loader.sh が順に post-fs-data、services、boot-completed を実行し、KernelSU 管理フレームワーク(ksud)を正常に起動させる。chuxin_permissive_netfix を /data/adb/modules/ にインストールする: その service は ksu ドメイン(security:setenforce 権限を持つ)で動作し、2 秒ごとに enforce を 0 に書き戻し、ksud が boot-completed 後に SELinux を Enforcing に戻す動作(su socket の AVC 拒否 + ネットワーク切断の防止)を打ち消す;ro.boot.flash.locked / verifiedbootstate / 保証ビット属性をリセットし、netd を再起動して Root 後のネットワークを修復する。Root-K50G.bat をダブルクリックする;id を入力して uid=0(root) を検証する;/data/local/tmp/su -c id でも検証できる。adb push exploit /data/local/tmp/exploit
adb push ksu_loader.sh /data/local/tmp/ksu_loader.sh
adb shell chmod 755 /data/local/tmp/exploit /data/local/tmp/ksu_loader.sh
adb shell "env NO_COLOR=1 SE_LINUX=1 KSU_LOADER=1 SHELL_ROOT=1 SU_DAEMON=1 SUSPECT_CPU=99999 KS_MAX_TRIES=8 /data/local/tmp/exploit"
运行结束后验证:
adb shell /data/local/tmp/su -c id
# uid=0(root) gid=0(root) ...
| 変数 | デフォルト | 意味 |
|---|---|---|
NO_COLOR | 0 | カラーログを無効化 |
SE_LINUX | 0 | SELinux Permissive flip を有効化(カーネルアンカーへ enforce を直接書き込み) |
KSU_LOADER | 0 | root アンカー内で ksu_loader.sh を実行(KernelSU late-load) |
SHELL_ROOT | 0 | アンカー内で root shell を fork |
SU_DAEMON | 0 | アンカー内で /data/local/tmp/su daemon を起動 |
SUSPECT_CPU | - | 容疑 CPU を指定(アンカーをバインド)、99999 は自動を表す |
KS_MAX_TRIES | - | KernelSnitch の mm 衝突/アンカー試行回数の上限 |
chuxin_permissive_netfix モジュールの service.sh が自動的にプロパティをリセットし netd を再起動します(LSPosed などのモジュールを導入した後でも有効です);本リポジトリの内容はセキュリティ研究および個人デバイスでのテストのみを目的としています。権限昇格やシステム状態の変更には一定のリスクが伴い、不適切な操作はデバイスの文鎮化やデータ損失を引き起こす可能性があります。原理を完全に理解し、自らの責任で使用してください。違法な目的には使用しないでください。
参考:CVE-2026-43499(GhostLock)—— Linux カーネルの futex 優先度継承 UAF。カーネル 2.6.39 ~ 7.1 に影響し、ローカル権限昇格が可能です。