
GhostLock (CVE-2026-43499) REDMI K90 Pro Max 台湾ファームウェア (myron, WPMTWXM) 向けカーネルエクスプロイト移植版 — オフセット、ビルドガイド、プリビルドバイナリ
POCO F8 Ultra / REDMI K90 Pro Max(コードネーム myron、Snapdragon 8 Elite Gen 5 / SM8850)のグローバル/台湾ファームウェア向けに GhostLock (CVE-2026-43499) カーネルエクスプロイトを移植したものです。
Target: HyperOS OS3.0.6.0.WPMTWXM — kernel
6.12.23-android16-5-g5a0e85dd9db0-ab14499855-4k
English summary below / 下方に英語の要約があります。
同じ端末、同じコードネームでも、国際/台湾版(WPMTWXM、すなわち POCO F8 Ultra)と中国版(WPMCNXM)のカーネルは同じバイナリではありません:
| ROM | kernel release | ビルド日時 |
|---|---|---|
| 台湾版 3.0.1.0.WPMTWXM | ...-ga5f232d1ead0-ab14083253-4k | 2025-09-11 |
| 台湾版 3.0.6.0.WPMTWXM | ...-g5a0e85dd9db0-ab14499855-4k | 2025-11-26 |
| 中国版 3.0.306/308.WPMCNXM | ...-g16e473de48a3-abogki462654244-4k | 2025-11-19 |
abogki*)を追跡しており、台湾版は Xiaomi 独自の統合ブランチです+pgo +bolt +lto でコンパイルされています——
コードに少しでも差異があれば、シンボル配置が完全に乱れますinit_task/init_cred は 0x10000 の差、selinux_state は 0x120c8 の差(固定オフセットではない)GhostLock のような data-only exploit はそのビルドの正確なアドレスを必要とするため、中国版向けに計算された payload は国際版ではすべて無効です。この repo は国際版に欠けているそのオフセット表を補うものです。
offsets/myron_tw/offsets.h — 台湾版 3.0.6.0 の完全なターゲット
(JoinChang/ghostlock-oneplus で使用)scripts/device_step1.sh — root 取得後の ABL バックアップ + unlock EFI 書き込みスクリプトghostlock バイナリ (arm64) があります_text を基準にバイナリを読み戻して相互検証——
init_task.comm="swapper"、init_cred.usage=4、init_uts_ns.release が uname
と文字単位で一致。実機 root なしで信頼できるオフセットを取得可能。task_struct 5184 bytes、
cred@0x900、pi_blocked_on@0xA18 など、上流の STRUCT_OFFSETS_6_12 と一致。futex_wait_requeue_pi(frame 0x1c0、waiter@sp+0x80)と
core_sys_select(frame 0x1b0、stack_fds@sp+0x18)が、実現可能と検証済みの
Xiaomi 17 (pudding) と完全に同一 → PSELECT_SHIFT=0。selinux_state.enforcing は +0、policycap は +2 にあり、1 バイト書き込みで policycap を壊すことはない。git clone https://github.com/JoinChang/ghostlock-oneplus.git
cd ghostlock-oneplus
cp /path/to/this-repo/offsets/myron_tw/offsets.h src/devices/myron_tw/offsets.h
# 在 src/devices/offsets.h 的 #include 清單加一行:
# #include "myron_tw/offsets.h"
make NDK_CC=<你的 NDK>/toolchains/llvm/prebuilt/*/bin/aarch64-linux-android35-clang
adb shell uname -r
# 必須是 6.12.23-android16-5-g5a0e85dd9db0-ab14499855-4k,否則程式會拒絕執行
adb push ghostlock /data/local/tmp/e
adb shell chmod 755 /data/local/tmp/e
adb shell /data/local/tmp/e
PSELECT_SHIFT=-1 などの微調整を試す国際版の機種は root 取得後、ABL 置換法でアンロックできる(公式枠は不要):abl_a/b をバックアップ →
unlock EFI を書き込み → fastboot で純正 ABL + spoof を書き込み → 復元。純正 ABL は自分が所持する
台湾版 3.0.1.0 ROM の abl.img から取得する(本 repo には Xiaomi 専有ファームウェアファイルを置いていない)。
scripts/device_step1.sh はこのフローの端末側部分である。このフローではユーザーデータを消去しない。
この repo は WPMTWXM のみを対象としています。Xiaomi は地域ごとのブランチでそれぞれカーネルをコンパイルするため、オフセットは共有できません——
しかし方法は共有できます。tools/ にあるのは、私たちが実際に台湾版 target を生成するために使っている3つのツールです:
# 1. 從你的 OTA 包解出 boot.img(payload.bin 用 payload-dumper),然後:
python3 tools/extract_offsets.py boot.img # 產生 OFFSETS_ENTRY + 交叉驗證
python3 tools/check_btf.py boot.img # 驗證 struct 布局(決定 STRUCT_OFFSETS 能否沿用)
python3 tools/check_feasibility.py boot.img # 驗證 pselect 棧配置(決定 SHIFT)
extract_offsets.py: kallsyms を抽出し、すべてのオフセットを計算し、さらに init_task.comm /
init_cred.usage / init_uts_ns.release を読み戻してクロス検証する——合格しなければ使わないcheck_btf.py: カーネルに埋め込まれた BTF から task_struct/cred/selinux_state
のフィールドオフセットを読み出し、STRUCT_OFFSETS_6_12 と項目ごとに照合するcheck_feasibility.py: futex_wait_requeue_pi と core_sys_select
のフレーム配置を逆アセンブルし、既知の実行可能なカーネルと照合する(pip install capstone が必要)三つとも合格したので、あなたのバージョンはおそらく通用するでしょう。新しい地域バージョンの target を PR で追加してくれると歓迎します。
POCO F8 Ultra(REDMI K90 Pro Max)のグローバルファームウェアは、CN ファームウェアとは異なるカーネルビルドを出荷しています(ブランチ、config、PGO/BOLT レイアウトが異なる)。そのため、コミュニティで公開されている GhostLock のオフセットはすべて CN の ogki カーネル上で計算されたものであり、グローバル版のデバイスでは一致しません。本リポジトリは、OS3.0.6.0.WPMTWXM(6.12.23-android16-5-g5a0e85dd9db0-ab14499855-4k)向けに欠けていたターゲットオフセットを提供します。これらは公式 OTA パッケージから静的に抽出し、相互検証(kallsyms + BTF + イメージ内読み取り)したもので、さらに Releases にビルド済みバイナリも用意しています。構造体レイアウトは CN ビルドと同一で、異なるのはシンボルアドレスのみです。スタックフレームのレイアウトは、動作確認済みの Xiaomi 17(pudding)と一致します。
ご自身のデバイスでのみ使用してください。 この脆弱性は公開されています(kernelCTF により開示が義務付けられたもの)。本ポートは、グローバル版の所有者が自身の端末を root 化できるようにするために存在します。
僅供自有裝置的授權安全研究。ご自身のデバイスでのみ、許可されたセキュリティ研究に使用してください。 いかなる結果も保証されず、使用は自己責任となります。