
GhostLock (CVE-2026-43499) — порт эксплойта ядра для тайваньской прошивки REDMI K90 Pro Max (myron, WPMTWXM): смещения, руководство по сборке, готовый бинарный файл
Порт эксплойта ядра GhostLock (CVE-2026-43499) для глобальной/тайваньской прошивки
POCO F8 Ultra / REDMI K90 Pro Max (кодовое имя myron, Snapdragon 8 Elite Gen 5 / SM8850).
Цель: HyperOS OS3.0.6.0.WPMTWXM — ядро
6.12.23-android16-5-g5a0e85dd9db0-ab14499855-4k
English summary below / 下方有英文摘要。
Один и тот же телефон, одно и то же кодовое имя, но ядра международной/тайваньской версии (WPMTWXM, то есть POCO F8 Ultra) и китайской версии (WPMCNXM) — не один и тот же бинарник:
| ROM | версия ядра | время сборки |
|---|---|---|
| Тайваньская 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 (нефиксированное смещение)Для data-only эксплойтов вроде GhostLock нужны точные адреса из конкретной сборки, поэтому все payload'ы, рассчитанные для китайской версии, полностью неработоспособны на международной. Этот репозиторий как раз восполняет недостающую для международной версии таблицу смещений.
offsets/myron_tw/offsets.h — полная цель для тайваньской версии 3.0.6.0 (для
JoinChang/ghostlock-oneplus)scripts/device_step1.sh — скрипт резервного копирования ABL после получения root + прошивки unlock EFIghostlock (arm64)_text —
init_task.comm="swapper", init_cred.usage=4, init_uts_ns.release посимвольно совпадает с uname.
Надёжные смещения можно получить без root на реальном устройстве.task_struct 5184 байт,
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, запись одного байта не повредит 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 берётся из abl.img имеющегося у вас
тайваньского ROM 3.0.1.0 (в этом repo не размещаются проприетарные файлы прошивки Xiaomi).
scripts/device_step1.sh — это часть данного процесса, выполняемая на телефоне. Этот процесс не стирает пользовательские данные.
Этот репозиторий охватывает только WPMTWXM. Xiaomi компилирует ядро отдельно для каждой региональной ветки, поэтому смещения нельзя использовать совместно —
но метод можно. В tools/ находятся три инструмента, которые мы реально используем для генерации тайваньской цели:
# 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_12check_feasibility.py: дизассемблирует конфигурацию кадра futex_wait_requeue_pi и core_sys_select
и сравнивает с заведомо рабочим ядром (требуется pip install capstone)Все три прошли, ваша версия, скорее всего, сработает. Приглашаем отправить PR с target для новой региональной версии.
Глобальная прошивка POCO F8 Ultra (REDMI K90 Pro Max) поставляется с другой сборкой ядра,
чем прошивка CN (другая ветка, конфигурация и раскладка 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 на своих телефонах.
Только для авторизованных исследований безопасности на собственных устройствах. For authorized security research on your own devices only. Никакие результаты не гарантируются; используйте на свой страх и риск.