Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ghostlock-oneplus — GhostLock (CVE-2026-43499) — эксплойт для ядра Android-устройств с заблокированным загрузчиком | Kitploit
Инструменты/GitHubGitHub/joinchang/ghostlock-oneplus
Безопасность AndroidПовышение привилегийФреймворки для эксплойтовАнализ уязвимостейТестирование на ПроникновениеМобильная безопасностьОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubjoinchang/ghostlock-oneplus

ghostlock-oneplus

GhostLock (CVE-2026-43499) — эксплойт для ядра Android-устройств с заблокированным загрузчиком

235461681 месяц назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

GhostLock — джейлбрейк заблокированного загрузчика

Эксплойт ядра для Android-устройств с заблокированным загрузчиком. Обеспечивает временный root + установку KernelSU без разблокировки загрузчика и без изменения boot-образа. Автоопределение версии ядра во время выполнения с таблицей смещений для нескольких устройств.

GhostLock, работающий на OnePlus Ace 6T с KernelSU (LKM, режим Jailbreak)

Уязвимость

CVE-2026-43499 — Use-After-Free в Futex PI (Priority Inheritance)

Затрагивает ядро Linux 5.7 ~ 7.1. Исправлено в стабильных версиях 6.1.175, 6.6.140, 6.12.86. Большинство Android-устройств остаются уязвимыми по состоянию на сентябрь 2026 года.

Системный вызов pselect6 копирует данные fd_set в стек ядра. В сочетании с механизмом ожидающих futex PI освобождённый стековый фрейм может быть переиспользован как структура rt_mutex_waiter. Затем ребалансировка rb-дерева при обходе PI-цепочки записывает контролируемые значения по произвольным адресам ядра.

Поддерживаемые устройства

Проверено на работоспособность

УстройствоSoCЯдроВетка GKISHIFT
OnePlus Ace 6T (PLR110)SM88456.12.38android16-50
OnePlus 15 (CPH2745/2747/2749)SM88506.12.23android16-50
OnePlus 15 (PLK110)SM88506.12.58android16-60
Xiaomi 17 (pudding)SM88506.12.23 / 6.12.69android16-5 / android16-60
OnePlus 13 (IN2060)SM87506.6.89android15-8-2
OPPO Pad 4 ProSM87506.6.89android15-8-2

Извлечённые смещения (ожидают тестирования на устройстве)

УстройствоSoCЯдроПримечания
OnePlus 15T (PLZ110)SM88456.12.38То же ядро, что и Ace 6T
OPPO Reno10 Pro+ (CPH2521)SM84755.10.236Компактный waiter 5.10, waiter word=0
Sony Xperia 1 IV (nagara)SM84505.10.218Компактный waiter 5.10, waiter word=0
OPPO Find X9 Pro (PLG110)D94006.12.23MediaTek, android16-5
Vivo X200 Ultra (V2454A)SM87506.6.89C ashmem, традиционные хуки
Vivo X Fold3 Pro (PD2337)SM86506.1.124Компактный waiter 6.1, waiter word=3
Vivo T4SM86506.1.145Компактный waiter 6.1, waiter word=3

Невозможно

Наложение стека pselect требует, чтобы освобождённый rt_mutex_waiter оказался в пределах контролируемой пользователем области stack_fds (слова 0–14). То, куда он попадёт, определяется профилями PGO/LTO компилятора, а не версией ядра. См. Раскладка стека.

УстройствоSoCЯдроПричина
OPPO Find X9 UltraSM87506.12.58PGO устраняет do_futex → waiter word=14
OnePlus 15 (PLK110)SM88506.12.69PGO встраивает do_futex → waiter word=20
OnePlus 12SM86506.1.141PGO встраивает do_futex → waiter word=13/19
OnePlus 13R / Ace 5SM86506.1.xOPLUS 6.1: waiter word=13
realme RMX5070SM66506.1.141OPLUS 6.1: waiter word=13
OPPO Pad 5 (OPD2502)MT68786.1.134OPLUS 6.1: waiter word=13
Motorola Edge 60 FusionMT68786.1.145Non-OPLUS 6.1: тот же результат
iQOO Neo 10 CNSM86506.1.84Фрейм do_futex 0xD0 → waiter word=-11
OPPO PKW110—5.15.180Фрейм do_futex 0x140 → waiter word=-29
iQOO Z9 5G—5.15.178Фрейм do_futex слишком большой
CPH2763 (OPPO)—6.1.115OPLUS 6.1: PGO встроен, waiter word=24
iQOO 12SM86506.1.1456.1: waiter word=9, task/lock в обнулённой области

Примечание о выполнимости на 6.1: Ядра OPLUS 6.1 стабильно невыполнимы из-за встраивания do_futex посредством PGO. Однако некоторые ядра 6.1 не от OPLUS (vivo) сохраняют стандартную цепочку вызовов и являются выполнимыми (vivo T4, X Fold3 Pro). Выполнимость необходимо проверять для каждого устройства отдельно.

Поток эксплуатации

Два пути получения root, выбираемых автоматически в зависимости от возможностей устройства:

Путь A: UMH Root (предпочтительный, устройства с C ashmem)

Требует off_ashmem_misc_fops != 0 (C ashmem со статическим miscdevice в BSS).

PI write (mode=4)  →  redirect miscdevice fops to fake fops
                   →  configfs r/w → pipe physrw (1-byte precise kernel r/w)
                   →  SELinux enforcing = 0 (single byte, no policycap corruption)
                   →  UMH: inject work_struct into system_unbound_wq
                   →  root script → ksud late-load → KSU installed

Доступно на: OnePlus 13, OPPO Pad 4 Pro, устройствах с C ashmem 5.10/6.1. Недоступно на Rust ashmem (6.12 GKI) — miscdevice, размещённый в куче.

Путь B: Прямая запись PI (резервный вариант)

Write 1 (mode=1)  →  SELinux enforcing = 0 (8-byte write, corrupts adjacent bytes)
Write 2 (mode=2)  →  task->cred = init_cred (uid=0, all capabilities)
Root shell         →  ksud late-load → KSU → SELinux policy fix

После W1+W2 эксплойт патчит поле конфигурации бинарного файла политики SELinux (|= 0xC0000000 для ANDROID_NETLINK_ROUTE + GETNEIGH) и перезагружает его через /sys/fs/selinux/load, чтобы восстановить сетевое подключение.

Режим начальной загрузки (автономный телефон)

App (seccomp)  →  Write 1 → mini-adb TCP → adb shell: full exploit → root

Auto-Boot

Загрузочный лаунчер предоставляется отдельным приложением GhostLock Anchor app.

Осуществимость компоновки стека

При NFDS=320 функция core_sys_select выделяет 256-байтовый буфер stack_fds в стеке ядра:

stack_fds:  0    5    10   14 | 15   20   25   29
            ├─in─┤─out─┤─ex──┤ ├res_in┤res_out┤res_ex┤
            ◄── USER CONTROLLED ──►│◄── KERNEL ZEROED ──►

Эксплойт размещает поддельные поля waiter (task, lock) во входных битмапах fd_set. Для вложенного waiter в 6.12 (14 слов): максимально допустимое слово waiter = 3. Для компактного waiter в 5.10/6.1 (10 слов): максимально допустимое слово waiter = 7.

Позиция waiter зависит от глубины цепочки вызовов:

ШаблонЦепочка вызововДопустимо
android16-5 (6.12)sys_futex → do_futex → fwrpi✅ слово waiter=2
android16-6 (6.12.58)sys_futex → do_futex → fwrpi✅ слово waiter=2
android16-6 (6.12.69 OPLUS)sys_futex → fwrpi (PGO inlined)❌ слово waiter=20
android16-6 (X9 Ultra)sys_futex → fwrpi (PGO inlined)❌ слово waiter=14
android15-8 (6.6)sys_futex → do_futex → fwrpi✅ слово waiter=2 (SHIFT=-2)
vivo 6.1sys_futex → do_futex → fwrpi✅ слово waiter=3
OPLUS 6.1sys_futex → fwrpi (PGO inlined)❌ слово waiter=13+
5.10 OPLUSsys_futex → do_futex → fwrpi✅ слово waiter=0

kernel_phys_load

Все записи в ядро используют псевдоним линейного отображения. Загрузчик выбирает kernel_phys_load, который различается для каждого SoC:

SoCkernel_phys_load
SM8845 (Ace 6T, 15T)0xa8000000
SM8750 (OnePlus 13, OPPO Pad 4 Pro)0xa8000000
SM8650 (vivo T4, X Fold3 Pro)0xa8000000
SM8850 (OnePlus 15, Xiaomi 17)0xc7800000

Неверное значение приводит к тихому сбою. Считайте его на рутованном устройстве:

su -c 'grep -i "Kernel code" /proc/iomem'   # c7810000-... → 0xc7800000

Переопределение во время выполнения: KPHYS=0xc7800000 /data/local/tmp/a/e

PSELECT_SHIFT

/data/local/tmp/a/e                        # Default (shift=0)
PSELECT_SHIFT=-2 /data/local/tmp/a/e       # OnePlus 13 (6.6)

KIMAGE_TEXT_BASE

Ядра 5.10 используют 0xffffffc008000000 (VA_BITS=39, отличается от значения по умолчанию 0xffffffc080000000 в 6.x). Это обрабатывается автоматически через поле kimage_text_base в записи смещений устройства.

Сборка

Скачать инструмент