
Honor 80 GT 権限昇格 PoC: GhostLock (CVE-2026-43499) + カスタム KernelSU モジュール読み込み
英語 | 中文
Honor 80 GT (AGT-AN00) 向けのローカル権限昇格エクスプロイト、
CVE-2026-43499 — カーネルの rtmutex remove_waiter パスにおける
use-after-free — に加え、KernelSU カーネルモジュールのロードを実現する
コンパニオンソリューションです。
原理的には、このバグとここで用いる手法は 9.0.0.230 までのすべての MagicOS ビルドに適用できます。適応版:
| MagicOS | カーネル | ステータス |
|---|---|---|
| 8.0.0.128 | 5.10.168 | ✅ 検証済み |
| 8.0.0.160 | 5.10.209 | ✅ 検証済み |
| 9.0.0.157 | 5.10.209 | ✅ 検証済み |
| 9.0.0.200SP1 | 5.10.236 | ✅ 検証済み |
| 9.0.0.220SP2 / SP4 | 5.10.236 | ✅ 検証済み (SP4 は SP2 と同じ boot image を同梱) |
| 9.0.0.230 | 5.10.236 | ✅ 検証済み |
| 8.0.0.131 | 5.10.198 | ⚠️ 実機での検証なし |
| 8.0.0.135 / 143 / 150 | 5.10.198 | ⚠️ 実機での検証なし |
| 8.0.0.161 | 5.10.209 | ⚠️ 実機での検証なし |
| 9.0.0.102 / 103 / 120 / 130 / 165 | 5.10.209 | ⚠️ 実機での検証なし (103 は 102 と同じ boot image を同梱) |
| 9.0.0.175SP1 / 187 | 5.10.226 | ⚠️ 実機での検証なし |
| 9.0.0.210 | 5.10.236 | ⚠️ 実機での検証なし |
⚠️ 警告
- 自身のデバイスでのセキュリティ研究のみを目的としています。
- 自己責任で使用してください。 本ソフトウェアはいかなる種類の保証も 伴いません (詳細は LICENSE を参照)。単に実行するだけでは 理論上デバイスが文鎮化したりデータが失われたりすることはありませんが、 念のため事前にバックアップを取ってください。このコードの実行、または これが付与する root アクセスを用いて行ったことによって生じるあらゆる 事態は、作者ではなくあなたの責任です。
- このエクスプロイトは UAF を通じてカーネルメモリを改変します。失敗した 場合、デバイスは再起動し、再起動によってすべてが復元されます。実行ごとの 成功率は 100% ではないため、再度実行してください。
- root はデバイスの完全な制御権です — 慎重に扱ってください。 本プロジェクト は root を取得するだけです。その後にイメージを書き込んだり、パーティションに 書き込んだり、保護を無効化したり、未検証のモジュールをインストールしたりすると、 デバイスが恒久的に文鎮化する可能性があり、それはあなたの責任です。
exploit/ GhostLock PoC source (Android arm64) + build system
src/ exploit core: futex UAF, KASLR slide, sysctl boot_id hijack,
arbitrary R/W, cred/SELinux/sig_enforce writes, KSU load
src/targets/ per-firmware offset tables (target.h)
ksu/ custom kernelsu.ko build (MagicOS kernel + device config) and the
PC-side adb load driver
tools/ on-device load helpers: load_ko.c / kmsg_dumper.c (built from
source), policy rules, loader template (+ where to get the
binaries)
要件: Docker、Android Platform Tools。
1つのビルド済みバンドルがサポート対象のすべてのファームウェアをカバーします。Releases からダウンロードし、ホスト上で展開して、次を実行してください
./setup.sh # PC, with adb: identifies the kernel, picks the
# matching exploit, runs the chain, retries when an
# attempt fails
PCなしの場合は、バンドルをスマートフォン上で展開し、Shizukuシェル(rish)から同じスクリプトを実行します。スクリプトは自身の場所を検出し、残りの処理をローカルで行います:
sh /sdcard/ghostlock/setup.sh
スクリプトは実行中のカーネルを同梱のマニフェストと照合します。検証済みのファームウェアは直接実行され、既知だが未テストのものは確認を求め、それ以外は拒否されます。
代わりにソースからビルドする場合:
# 1. Build the exploit binary
cd exploit && ./docker-build.sh bin # exploit_static (8.0.0.128)
# 8.0.0.160: ./docker-build.sh PROJECT=annap-AGT-AN00_8.0.0.160 bin
# (the static binary bakes in the default env config; any knob can still
# be overridden by environment variables at launch; first run pulls the NDK, ~1.2GB)
# 2. The KSU-side binaries live in ksu/tools/ (see ksu/tools/README.md):
# kernelsu.ko — build per ksu/README.md;
# ksud, magiskpolicy, ksu_rules — shipped in the repo;
# load_ko, kmsg_dumper — ./docker-build.sh tools
# 3. Enable ADB debugging on the phone, then
bash ../ksu/ksu_load_ko.sh
# 8.0.0.160: PROJECT=annap-AGT-AN00_8.0.0.160 bash ../ksu/ksu_load_ko.sh
スクリプトは adb 経由でチェーン全体を駆動します。GhostLock(root アクセス、SELinux
permissive、sig_enforce 無効化)、magiskpolicy による SELinux ポリシー注入、偽の kallsyms
bind-mount、load_ko(init_module)、続いて ksud の起動ステージ、
そして絶対的な最終ステップとして SELinux enforcing の復元を行います。脱獄が
完了すると、スクリプトは KernelSU マネージャーを開きます(
「Working <LKM> [Jailbreak mode]」と表示されます)。
CONFIG_MODULE_SIG_FORCE=y — 実行時の sig_enforce フラグが
署名なしモジュールのロードをブロックします。エクスプロイトはこれを一時的に 0 に反転させます(ローダー
スクリプトはモジュールが組み込まれると 1 に戻します)。commit_creds などを
/proc/kallsyms から削除するため、カーネルローダーは .ko の未定義
シンボルを解決できません。このフローでは、除去されたシンボルを
真の実行時アドレス(リンクアドレス + KASLR スライド)の先頭に付加した偽の kallsyms を
bind-mount します。android12-5.10_kernelsu.ko をそのまま使用することはできません。ksu/ は
ファームウェアのサブレベルとデバイス自身のカーネル設定に一致する MagicOS カーネルソースに対して
KernelSU を再ビルドします。ksu/README.md を参照してください。完全なチェーン(UAF → KASLR → 任意の R/W → cred → SELinux permissive → sig_enforce → KernelSU のライブ化、enforcing の復元、boot_id の復元)は、 上記で ✅ とマークされたバージョンについて実機で検証済みです。⚠️ と マークされたバージョンは適応済みですが、実機では未検証です。実行が 失敗して端末が再起動する可能性があります。セットアップスクリプトは自動的に 再試行します。または再度実行してください。
exploit/、トップレベルのドキュメント)は、
この移植の元となった上流の IonStack PoC と同様に、Apache License 2.0
(LICENSE を参照)の下にあります。ksu/ 配下のファイルは GPL-2.0(
ksu/LICENSE を参照)です。init-bootid.patch と ksu_rules.annotated ポリシー
セットは、GPL-2.0 である KernelSU の kernel/ ディレクトリに由来します。