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

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

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

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

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

Категории

Все категории
Loading categories
cve-2026-43499 — Исследование осуществимости 43499 (ghostlock) для PD2229B | Kitploit
Инструменты/GitHubGitHub/catxiaoshi/cve-2026-43499
Безопасность AndroidПовышение привилегийАнализ уязвимостейЭксплуатацияОбратная инженерияМобильная безопасностьЭксплуатация Бинарных Файлов
GitHubcatxiaoshi/cve-2026-43499

cve-2026-43499

Исследование осуществимости 43499 (ghostlock) для PD2229B

Репозиторий
101 месяц назадЕщё не проверено

Популярное

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

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

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

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

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

GhostLock: Итоги неудачной эксплуатации на PD2229 (SM8475, 5.10.233 GKI)

1. Сведения об уязвимости и устройстве

1.1 Базовая информация о CVE-2026-43499 (GhostLock)

ПараметрЗначение
Тип уязвимостиUse-After-Free на стеке в пути rt_mutex / futex PI
Версия внедренияLinux 2.6.39-rc1 (май 2011, commit 8161239a8bcc)
Версия исправленияОсновная ветка 7.1 (commit 3bfdc63936dd), стабильные ветки: 6.1.175 / 6.6.140 / 6.12.86 / 6.18.27 / 7.0.4
ПредусловияCONFIG_FUTEX_PI=y (включено по умолчанию в основных ядрах)
CVSS7.8 High
Стабильность эксплуатацииОригинальная цепочка NebuSec — 97%, получение root за ~5 секунд
Награда kernelCTF$92,337 USD

Затронутый диапазон ядер:

  • 2.6.39 ≤ Linux < 6.1.175 ✅ Затронуто
  • 6.2 ≤ Linux < 6.6.140 ✅ Затронуто
  • 6.7 ≤ Linux < 6.12.86 ✅ Затронуто
  • 6.13 ≤ Linux < 6.18.27 ✅ Затронуто
  • 6.19 ≤ Linux < 7.0.4 ✅ Затронуто
  • Android GKI 5.10 отсутствует во всех ветках исправления → 5.10.233 на PD2229 теоретически затронут

1.2 Фактические данные устройства PD2229


2. Идеальная цепочка эксплуатации vs фактический прогресс на PD2229

2.1 Оригинальная цепочка NebuSec (x86_64 / Pixel 10 — успех)

root@kitploit:~
1. Обход KASLR        → prefetch timing / PR_SET_MM_MAP auxv
2. Триггер UAF        → взаимоблокировка трёх потоков PI → FUTEX_CMP_REQUEUE_PI возвращает -EDEADLK
3. Перехват стека     → PR_SET_MM_MAP копирует auxv в стековый фрейм waiter
4. Ограниченная запись rb_erase → перезапись inet6_protos[IPPROTO_UDP]
5. CEA + ROP          → перехват потока управления
6. Переключение core_pattern → root shell (97% успеха)

2.2 Фактический прогресс по этапам на PD2229


3. Результаты исчерпывающего поиска примитива перехвата стека (фактические данные PD2229)

3.1 Ключевые вычисления раскладки стековых фреймов

root@kitploit:~
Общая глубина пути futex:
  __arm64_sys_futex    0x90
  + do_futex           0xc0
  + futex_wait_requeue_pi  0x1b0
  = 0x300
Позиция waiter = SYS_SP - 0x300 + 0x20 = SYS_SP - 0x2e0

Путь pselect:
  Стековый фрейм core_sys_select 0x1c0, stack_fds на sp+0x50
  Область покрытия: начиная с SYS_SP - 0x1c0 + 0x50 = SYS_SP - 0x170
  Расстояние до waiter (SYS_SP - 0x2e0) = 0x170 (368 байт) → перекрытия нет

3.2 Испробованные 17 методов записи в стек

17/17 — все неудачны.

3.3 Корневая причина неудачи

Раскладка стека, созданная компилятором для SM8475 5.10 GKI на PD2229 (PGO + LTO + BOLT), приводит к тому, что stack_fds в core_sys_select и rt_mutex_waiter в futex_wait_requeue_pi архитектурно не перекрываются. Это объективный факт, определяемый компилятором, а не проблема техники эксплуатации.

В репозитории JoinChang прямо указано: "The pselect stack overlay only works when the freed rt_mutex_waiter lands within the user-controllable region of the stack_fds buffer" — PD2229 не удовлетворяет этому условию.


4. Сравнительный анализ публичных репозиториев

NebuSec/CyberMeowfia — оригинальный фреймворк эксплуатации

  • Репозиторий: https://github.com/NebuSec/CyberMeowfia
  • Цель: x86_64 Linux / Pixel 10 (6.x GKI)
  • Перехват стека: PR_SET_MM_MAP копирует auxv в стек ядра
  • Процент успеха: 97%, ~5 секунд до [root shell]
  • Применимость к PD2229: ❌ PR_SET_MM_MAP блокируется на Android через EPERM

JoinChang/ghostlock-oneplus — джейлбрейк OnePlus с заблокированным загрузчиком

  • Репозиторий: https://github.com/JoinChang/ghostlock-oneplus
  • Проверенные устройства:
    • OnePlus Ace 6T (PLR110, SM8845) — 6.12.38 GKI ✅
    • OnePlus 15 (PLK110, SM8845) — 6.12.23 GKI ✅
  • Технические особенности:
    • Автоматическое извлечение смещений: kallsyms (28) + BTF (57) + производные (9) + константы (12) = 103/103
    • Перекрытие стека pselect, SP diff = -64
    • PSELECT_SHIFT = -2
    • Цепочка эксплуатации: futex UAF → подделка waiter → управление стеком через pselect → ограниченная запись rb_erase → selinux_state.enforcing=0 → перезапись cred на init_cred
  • Явное заявление о неприменимости: "Not Feasible (stack layout incompatible)" — применимо только к ядрам, где pselect stack_fds перекрывается с waiter
  • Применимость к PD2229: ❌ Поколение ядра не совпадает (6.12 против 5.10), раскладка стека не перекрывается

p2p3p/GhostLock-for-OnePlus — полная эксплуатация OnePlus 6.12

  • Репозиторий: https://github.com/p2p3p/GhostLock-for-OnePlus
  • Проверено: OnePlus Ace 6T (SM8845, 6.12.38) ✅
  • Применимость к PD2229: ❌ Как и JoinChang, поколение ядра не совпадает

YuKongA/ghostlock-oplus — OPPO Find N5/X8

  • Репозиторий: https://github.com/YuKongA/ghostlock-oplus
  • Ядро: 6.6.118 GKI
  • Применимость к PD2229: ❌ Поколение ядра не совпадает

Адаптация OPPO Find X6 Pro (PGEM10) — 5.15.149

  • Устройство: SM8550, 5.15.149-android13, Android 15
  • Прогресс: ✅ Обход KASLR (perf_event_open + выборка callchain); последующие этапы не опубликованы полностью
  • Значение: Доказывает возможность обхода KASLR на GKI 5.15, но этап перехвата стека публично не подтверждён

pubglite55/oppo-ghostlock — OPPO Find N2

  • Репозиторий: https://github.com/pubglite55/oppo-ghostlock
  • Устройство: OPPO Find N2 (CPH2413, SM8475)
  • Ядро: 5.10.236-android12-9-o-g74d132f4467a
  • Android: 16 (BP2A.250605.015)
  • Реализовано:
    • ✅ Firefox CVE-2026-10702 AAW (этап 1)
    • ✅ Обход KASLR (прямое вычисление kaslr_base)
    • ✅ Триггер GhostLock FUTEX (FUTEX_CMP_REQUEUE_PI ret=0)
    • ✅ Утечка mm_struct через KernelSnitch
    • ✅ Хип-спрей sk_buff (4/4 send успешно)
    • ✅ Проверка 70+ смещений в IDA Pro
  • Основной блокер:

    "pselect не может манипулировать структурой waiter — при NFDS >336 fd_set находится в куче; configfs/ashmem не поддерживаются (SET_NAME ashmem усекается); все остальные пути записи в ядро заблокированы (/proc/self/mem, /dev/mem, binder)"

  • Связь с PD2229: Та же платформа и поколение (SM8475, 5.10.236 против 5.10.233), разница всего в 3 минорных версии, сталкивается с абсолютно теми же архитектурными ограничениями

harry1080/oppo-ghostlock — OPPO Find N2

  • Репозиторий: https://github.com/harry1080/oppo-ghostlock
  • Устройство: OPPO Find N2 (CPH2413, SM8475)
  • Ядро: 5.10.236-android12-9-o-g74d132f4467a
  • Android: 16 (BP2A.250605.015)
  • Публичное заявление сообщества:

    "pixel10 能利用的版本的 pselect stack_fds 正好和 rt_waiter 在内核栈上重合,这个部分实际上是最麻烦的地方,OPPO findN2 的内核这两个调用的栈部分完全不重合,或者重合也不可控,得找另外的控制栈的方法,要换其他可控内核栈的系统调用来构造栈,简单适配偏移是不可能成功的,oppo 的 rt_waiter 完全与 pselect stack_fds 不重合"

  • Связь с PD2229: Как и PD2229, использует SM8475 5.10 GKI, выводы полностью применимы

4.3 Сводная таблица сравнения репозиториев


5. Ключевые символы ядра и смещения (фактические данные vmlinux PD2229)

Статический базовый адрес 0xffffffc008000000, в рантайме необходимо добавить KASLR slide.

Структура rt_mutex_waiter (кастомизация vivo 5.10.233)

root@kitploit:~
struct rt_mutex_waiter {
    uint64_t private;           // +0x00  (приватное поле vivo)
    struct rb_node {
        uint64_t rb_parent_color; // +0x08
        uint64_t rb_right;        // +0x10  (vivo поменял порядок)
        uint64_t rb_left;         // +0x18
    } tree;
    struct task_struct *task;   // +0x20
    struct rt_mutex *lock;      // +0x28
};
// Общий размер 0x30 (48 байт)

6. Реализовано vs требуется реализовать

✅ Реализованная инфраструктура

  1. Обход KASLR — perf_event_open + выборка callchain (метод аналогичен OPPO Find X6 Pro 5.15.149)
  2. Триггер UAF — взаимоблокировка трёх потоков PI, FUTEX_CMP_REQUEUE_PI возвращает -EDEADLK
  3. Полная таблица символов — 103+ символа проверены через IDA (по методологии извлечения 103/103 от JoinChang)
  4. Раскладка структуры rt_mutex_waiter — кастомные смещения vivo подтверждены
  5. Точный анализ раскладки стековых фреймов — расчёт глубин путей futex и pselect/io_uring завершён
  6. Исчерпывающее исключение 17 кандидатов перехвата стека — построена полная матрица «невозможно»

❌ Не реализовано (основной блокер)

  1. Примитив перехвата стека — раскладка стека компилятора SM8475 5.10 GKI делает его архитектурно недоступным
  2. Примитив ограниченной записи — невозможно триггернуть rb_erase из-за неудачи перехвата стека
  3. Все последующие этапы — каскадная блокировка

7. Итоговое заключение

⚠️ GhostLock (CVE-2026-43499) не эксплуатируется на PD2229 (vivo X Fold+, SM8475, 5.10.233 GKI, Android 15 OriginOS 5).

Корневая причина — раскладка стека, созданная компилятором SM8475 5.10 GKI (PGO+LTO+BOLT), из-за которой стековые фреймы всех известных syscall архитектурно не перекрываются с rt_mutex_waiter. Это объективный факт, определяемый компилятором, а не проблема техники эксплуатации.

Все успешные случаи эксплуатации относятся к GKI 6.6/6.12, поскольку вывод компилятора для этих новых ядер обеспечивает идеальное перекрытие pselect fd_set с waiter (SP diff=-64). GKI 5.10 не обладает этим условием.


Созданная инфраструктура

  • ✅ Примитив обхода KASLR (побочный канал perf_event_open)
  • ✅ 103+ символов ядра и смещений
  • ✅ Раскладка структуры rt_mutex_waiter
  • ✅ Возможность триггера UAF
  • ✅ Матрица исключения 17 кандидатов перехвата стека

9. Индекс репозиториев


Скачать инструмент
ПараметрЗначение
SoCQualcomm SM8475 (Snapdragon 8 Gen 1 Plus)
Версия ядра5.10.233-gki-g6e61de9f5b58 #1 SMP PREEMPT (24 ноября 2025)
Версия Android15 (OriginOS 5)
Время сборки25.11.2025
Патчи Android01.11.2025
CONFIG_FUTEX_PIy ✅
CONFIG_UNMAP_KERNEL_AT_EL0y (KPTI включен)
kptr_restrictenforced
CONFIG_IO_URINGy ✅ (подтверждено символами vmlinux, seccomp не блокирует io_uring_setup)
ЭтапСтатусОписание
1. Обход KASLR✅ РеализованоПобочный канал perf_event_open + выборка callchain (метод аналогичен адаптации для OPPO Find X6 Pro 5.15.149)
2. Триггер UAF✅ РеализованоВзаимоблокировка трёх потоков PI успешна, FUTEX_CMP_REQUEUE_PI возвращает -EDEADLK
3. Примитив перехвата стека❌ Архитектурный провалСтековые фреймы всех известных syscall не перекрываются с waiter (см. раздел 3)
4. Ограниченная запись rb_erase❌ ЗаблокированоПредусловия не выполнены
5. Перезапись inet6_protos❌ Не начатоЗависит от этапа 4
6. ROP / перехват потока управления❌ Не начатоЗависит от этапа 5
7. root shell❌ Не начатоЗависит от этапа 6
#МетодСистемный вызовРезультат на PD2229Основная причина неудачи
1stamp_prctlPR_SET_MM_MAP❌ EPERMЖёсткая блокировка Android
2stamp_pselectpselect6 (NFDS=320)❌ Нет перекрытияwaiter на 120 Б ниже fd_set
3stamp_pselectpselect6 (NFDS>336)❌ Выделение в кучеПуть kvmalloc
4stamp_socketMCAST_JOIN_SOURCE_GROUP❌ Недостаточное покрытиеЗаписывается только поле lock
5stamp_sendmsgsendmsg❌ 80 Б до waiterГлубина фрейма 0x90 недостаточна
6stamp_sendmmsgsendmmsg❌ 112 Б до waiterФрейм недостаточен
7stamp_recvmmsgrecvmmsg❌ Обнуляет task/lockФрейм 0x1d0 повреждает критические указатели
8stamp_process_vmprocess_vm_writev❌ Нет перекрытияСтек дочернего потока выделяется отдельно
9stamp_keyctlKEYCTL_INSTANTIATE_IOV❌ EOPNOTSUPPСистемный вызов не поддерживается + фрейм 0x40
10stamp_tcpTCP_ZEROCOPY_RECEIVE❌ Фрейм недостаточенПредполагаемая глубина мала
11stamp_futexРекурсия FUTEX_CMP_REQUEUE_PI❌ Логически невозможноРазрушает окно UAF
12binder ioctlBINDER_WRITE_READ❌ EACCESНет прав на /dev/binder у shell
13pollpoll❌ Выделение в кучеpollfd в куче
14epoll_waitepoll_wait❌ Фрейм слишком мелкийФрейм 0xE0
15sched_setattrsched_setattr❌ Недостаточная глубинаФрейм 0xb0
16timerfd_settimetimerfd_settime❌ Нет копирования в стекНет большого стекового буфера
17io_uring_registerIORING_REGISTER_*❌ Двойной провал①Фрейм всего 0xF0, цель copy_from_user фиксирована на sp+0x8 (разница 424 байта с sp+0x1D0 у waiter); ②хотя io_uring_setup не блокируется seccomp (возвращает EFAULT, а не ENOSYS), раскладка стека не совпадает
РепозиторийУстройствоSoCЯдроМетод перехвата стекаСтатусВозможность повторного использования на PD2229
NebuSec/CyberMeowfiaPixel 10-6.xPR_SET_MM_MAP✅ 97%❌ Блокировка Android
JoinChang/ghostlock-oneplusOnePlus Ace 6TSM88456.12.38pselect (SP diff=-64)✅ Проверено❌ Поколение ядра не совпадает
p2p3p/GhostLock-for-OnePlusOnePlus Ace 6TSM88456.12.38pselect✅ Проверено❌ Поколение ядра не совпадает
YuKongA/ghostlock-oplusFind N5/X8-6.6.118pselect✅❌ Поколение ядра не совпадает
Адаптация OPPO Find X6 ProFind X6 ProSM85505.15.149perf KASLR + ?🟡 KASLR ✅, далее не опубликовано❌ Другая платформа
pubglite55/oppo-ghostlockFind N2SM84755.10.236Исчерпывающий поиск неудачен❌ Основной блокер⚠️ Та же платформа и поколение, та же судьба
harry1080/oppo-ghostlockFind N2SM84755.10.236Исчерпывающий поиск неудачен❌ Архитектурно невозможно⚠️ Та же платформа и поколение, та же судьба
PD2229 (данный отчёт)PD2229SM84755.10.233Все 17 кандидатов неудачны❌ Архитектурно невозможно—
СимволАдресНазначение
rt_mutex_start_proxy_lock0xffffffc00822baa8Точка входа триггера уязвимости
futex_wait_requeue_pi0xffffffc0082d7df4Выделение waiter, фрейм 0x1b0
__arm64_sys_futex0xffffffc0082dfe9cФрейм 0x90
do_futex0xffffffc0082d0768Фрейм 0xc0
core_sys_select0xffffffc008634cf0Фрейм pselect 0x1c0
____sys_sendmsg0xffffffc0093eda88Фрейм 0x90
do_recvmmsg0xffffffc0093ef49cФрейм 0x1d0
__arm64_sys_io_uring_register0xffffffc008aae328Фрейм 0x10+0x70
__io_uring_register0xffffffc008aae5f8Фрейм 0x80
inet6_protos0xffffffc00ab0a278Цель записи на этапе 4
selinux_state0xffffffc00aee8c70Цель отключения SELinux
init_task0xffffffc00ab0c240Источник чтения cred
РепозиторийURLКлючевая ценность
NebuSec/CyberMeowfiahttps://github.com/NebuSec/CyberMeowfiaОригинальный фреймворк эксплуатации, 97% успеха
JoinChang/ghostlock-oneplushttps://github.com/JoinChang/ghostlock-oneplusУспешная адаптация для 6.12 GKI, методология извлечения 103 смещений
p2p3p/GhostLock-for-OnePlushttps://github.com/p2p3p/GhostLock-for-OnePlusПолная цепочка эксплуатации для 6.12 GKI
YuKongA/ghostlock-oplushttps://github.com/YuKongA/ghostlock-oplusАдаптация OPPO для 6.6 GKI
pubglite55/oppo-ghostlockhttps://github.com/pubglite55/oppo-ghostlockПример неудачи на той же платформе SM8475 5.10.236
harry1080/oppo-ghostlockhttps://github.com/harry1080/oppo-ghostlockПример неудачи на той же платформе SM8475 5.10.236
Технический анализ NebuSechttps://nebusec.ai/research/ionstack-part-2/Технические детали оригинальной цепочки GhostLock
Вышестоящее исправлениеcommit 3bfdc63936ddКод исправления