
Honor 80 GT (MagicOS 8.0.0.128、カーネル5.10.168) 権限昇格PoC: GhostLock (CVE-2026-43499) + カスタムKernelSUモジュールの読み込み
English | 中文
Honor 80 GT (AGT-AN00) 向けのローカル権限昇格エクスプロイト (CVE-2026-43499 — カーネル rtmutex の remove_waiter パスにおける use-after-free) に加えて、付属の KernelSU カーネルモジュールロードソリューションも含みます。
原理上、このバグとここで紹介する手法は 9.0.0.220 までのすべての 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 と同じブートイメージを同梱) |
9.0 系の他のバージョンも、オフセットテーブル (src/targets/) を再生成し、kstack キャリアスロットを再確認すれば動作する見込みです。
⚠️ 警告
- セキュリティ研究はご自身のデバイスでのみ行ってください。
- 自己責任で使用してください。 本ソフトウェアにはいかなる保証もありません (LICENSE 参照)。理論上、実行するだけでデバイスが文鎮化したりデータが失われたりすることはないはずですが、それでも先にバックアップを取ってください。このコードの実行であれ、このコードが付与する root アクセスを使って行ういかなる操作であれ、その結果生じるすべては作者ではなくあなた自身の責任です。
- このエクスプロイトは UAF を通じてカーネルメモリを改変します。失敗するとデバイスが再起動しますが、再起動すればすべて元に戻ります。1回の実行で必ず成功するとは限らないので、その場合はもう一度実行してください。
- 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。
ファームウェアごとのビルド済みバンドル: Releases からお使いの MagicOS バージョンに一致するものを取得し、ホスト上で解凍して実行してください。
./setup.sh # PC, with adb: checks the kernel version, pushes
# everything, runs the chain, retries on the
# occasional miss
PC が手元にない場合: バンドルをスマホ上で解凍し、Shizuku シェル (rish) から同じスクリプトを実行してください。スクリプトは自身がどこにあるかを検出し、残りの処理をローカルで行います:
sh /sdcard/ghostlock-<version>/setup.sh
代わりにソースからビルドする場合:
# 1. Build the device 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
# (./docker-build.sh ondevice builds the static binary with the default
# env config baked in; first run pulls the NDK, ~1.2GB)
# 2. Obtain/build the KSU bundle binaries into ksu/tools/ —
# see ksu/tools/README.md (kernelsu_h80gt.ko: ksu/README.md — build it
# against the opensource tree matching your firmware's kernel sublevel;
# ksud: shipped in the repo; magiskpolicy: 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 + permissive 化 + sig_enforce フリップ)、magiskpolicy による SELinux ポリシー注入、偽の kallsyms の bind-mount、load_ko (init_module)、そして ksud の立ち上げ段階へ進み、最終ステップとして SELinux enforcing を復元します。/proc/modules に kernelsu が現れるのを待ってから、KernelSU マネージャーを開いてください ("Working <LKM> [Jailbreak mode]" と表示されます)。
CONFIG_MODULE_SIG_FORCE=y — ランタイムの sig_enforce フラグが未署名モジュールのロードをブロックするため、エクスプロイトはこれを一時的に 0 に反転させます (ローダースクリプトはモジュールが組み込まれた後、1 に復元します)。/proc/kallsyms から commit_creds などを削除するため、カーネルローダーは .ko の未定義シンボルを解決できません。このフローでは、削除されたシンボルを実際の実行時アドレス (リンクアドレス + KASLR スライド) とともに先頭に追加した偽の kallsyms を bind-mount します。android12-5.10_kernelsu.ko は直接使用できません。ksu/ は、ファームウェアのサブレベルとデバイス自身のカーネル設定に一致する MagicOS カーネルソースに対して KernelSU v3.2.5 を再ビルドします。ksu/README.md を参照してください。上記の表のすべてのバージョンについて、実機でのフルチェーン (UAF → KASLR → 任意 R/W → cred → SELinux permissive → sig_enforce → KernelSU ライブ、enforcing 復元、boot_id 復元) を検証済みです。実行は初期段階で失敗してスマホが再起動することがあります (およそ4回に1回)。セットアップスクリプトが自動的にリトライするので、そのまま再実行してください。
exploit/、トップレベルのドキュメント) は、この移植版の由来であるアップストリームの IonStack PoC と同じく Apache License 2.0 の下にあります (LICENSE 参照)。ksu/ 配下のファイルは GPL-2.0 です (ksu/LICENSE 参照): init-h80gt.patch と ksu_rules.annotated ポリシーセットは、GPL-2.0 である KernelSU の kernel/ ディレクトリに由来します。