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

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

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

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

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

Категории

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

GhostLock-for-OnePlus

(CVE-2026-43499)Эксплойт ядра для устройств OnePlus с разблокированным загрузчиком.

Репозиторий
3613191 месяц назадПроверено Kitploit

Популярное

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

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

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

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

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

GhostLock — OnePlus

中文

Эксплойт ядра, нацеленный на устройства OnePlus с заблокированным загрузчиком. Использует CVE-2026-43499 для получения root-доступа без разблокировки загрузчика и изменения boot.img.

Только для авторизованных исследований в области безопасности и образовательных целей.


Оглавление

  • Обзор уязвимости
  • Поддерживаемые устройства
  • Предварительные требования
  • Сборка
  • Использование
  • Режимы запуска
  • Технические детали
  • Структура файлов
  • Добавление новых устройств
  • FAQ

Обзор уязвимости

ПараметрЗначение
CVECVE-2026-43499
ТипFutex PI (Priority Inheritance) Use-After-Free
ОбластьLinux kernel 2.6.39 ~ 7.1
Исправлено вMainline 7.1 (коммит 3bfdc63936dd)
Статус AndroidGKI 6.12.x всё ещё уязвим

Корневая причина

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

Цепочка

root@kitploit:~
futex PI UAF (CVE-2026-43499)
  ├─ Forge rt_mutex_waiter object
  ├─ Control kernel stack via pselect/select fd_set layout
  ├─ Trigger rt_mutex PI operation for arbitrary write
  ├─ Write 1: selinux_state.enforcing = 0
  └─ Write 2: cred → init_cred (uid=0, full capabilities)

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

Другие устройства OnePlus на том же семействе SoC, Android 16 или ядре 6.12.x могут быть адаптированы с помощью извлечения смещений из boot.img.


Предварительные требования

ksud (требуется для KernelSU)

GhostLock выполняет повышение привилегий. Для установки KernelSU требуется ksud (поставляется вместе с kernelsu.ko для конкретного KMI):

ИсточникПримечания
ReSukiSU APK (рекомендуется)Установите ReSukiSU; APK включает

Без ksud эксплойт всё равно получит root-оболочку с uid=0, но KernelSU не будет установлен, и su не сохранится.


Сборка

Предварительные требования

  • Android NDK (r25+)
  • Установите ANDROID_NDK_HOME или ANDROID_NDK_ROOT

Сборка

root@kitploit:~
# Default (API 35)
make

# Specify API level
make API=34

# Specify NDK path
NDK=/path/to/android-ndk make

Артефакт

ghostlock — статически слинкованный ARM64 ELF-исполняемый файл.


Использование

Разовая настройка

root@kitploit:~
# 1. Enable ADB TCP mode
adb tcpip 5555

# 2. Push ADB key (required for bootstrap mode)
adb push ~/.android/adbkey /data/local/tmp/a/adbkey

# 3. Push the exploit
adb push ghostlock /data/local/tmp/a/e
adb shell chmod 755 /data/local/tmp/a/e

После первого успешного запуска resetprop автоматически устанавливает persist.adb.tcp.port=5555, что позволяет полностью автоматический запуск при последующих перезагрузках.


Режимы запуска

Полный эксплойт (контекст ADB-оболочки)

root@kitploit:~
/data/local/tmp/a/e
  • perf доступен, точное определение task_struct дочернего процесса
  • Двухэтапный: W1 отключает SELinux → W2 повышение привилегий → загрузка KernelSU

Режим Bootstrap (контекст приложения, ограниченный seccomp)

root@kitploit:~
/data/local/tmp/a/e --bootstrap
  1. Write 1 → отключить SELinux
  2. Использовать освобождённые разрешения для setprop, чтобы включить ADB TCP 5555
  3. Встроенный Mini ADB-клиент подключается к 127.0.0.1:5555
  4. RSA-аутентификация с предварительно переданным ключом
  5. Полный запуск эксплойта через ADB shell (без seccomp)

Только Write 1

root@kitploit:~
/data/local/tmp/a/e --write1
  • До 20 попыток
  • Полезно для отладки или временного отключения SELinux

Технические детали

1. Сопоставление ядра во время выполнения

Смещения хранятся в таблице поиска src/devices/offsets.h с ключом по uname -r. Программа автоматически сопоставляет их при запуске; неизвестные ядра отклоняются.

root@kitploit:~
static const struct kernel_offsets known_offsets[] = {
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14275539-4k", ...),
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14552068-4k", ...),
  OFFSETS_ENTRY("6.12.23-android16-5-...-ab14541642-4k", ...),
  { .uname_r = NULL }  /* sentinel */
};

Источники смещений

Проверенные BTF структуры

2. Обход KASLR

Режим SLIDE — утечка boot_id

Когда доступ к указателям ядра ограничен (kptr_restrict), утечка базового адреса происходит через перезапись boot_id адресом ядра:

root@kitploit:~
Read /proc/sys/kernel/random/boot_id
  └─ UUID contains nfulnl_logger address
      └─ KASLR slide = leaked_addr - image_offset
          └─ kaslr_base

Режим FOPS/CFI — утечка таблицы fops

Когда устройство ashmem доступно, используйте примитивы чтения/записи configfs для чтения указателей функций из таблицы fops ashmem и вычисления смещения KASLR.

3. Распыление кучи ядра

Создавайте поддельные объекты ядра на страницах порядка 3 (32 КБ):

  • Поддельный file_operations — перехват указателя fops miscdevice ashmem
  • Поддельный rt_mutex_waiter — имитация узла ожидания в цепочке PI
  • Поддельный task_struct — ссылка на задачу при обходе PI
  • Поддельный rt_mutex (блокировка) — корректная информация об ожидающем/владельце

Реализовано через SKB (socket buffer) + KernelSnitch:

  • KernelSnitch — коллизия хеша futex для утечки адресов mm_struct
  • Распыление SKB — sendmsg для заполнения кучи ядра

4. Физическая память R/W (Pipe)

После получения базового адреса KASLR используйте буферы pipe для доступа к памяти на физическом уровне:

root@kitploit:~
1. Locate pipe buffer in physmap
2. Forge pipe_buffer ops table pointing to known pipe_buf_ops
3. Hijack pipe_buffer.page to target physical address
4. Arbitrary physical read/write via normal pipe operations

Поддерживаются: pipe_read64, pipe_write64, pipe_phys_read_data, pipe_phys_write_data

5. Двухэтапная запись

Write 1 — отключение SELinux

root@kitploit:~
Target: selinux_state.enforcing (offset 0x00)
Method: child-node PI write → forge waiter __rb_parent_color
        pointing to selinux_enforcing - 8
        rb-tree rebalance writes 0x00

Write 2 — повышение до root

root@kitploit:~
Target: child process cred pointer
Method: 1. fork child → perf_find_task() locate task_struct
        2. calculate cred field offset
        3. child-node PI write → cred = init_cred (uid=0, full caps)
        4. clear seccomp (TIF_SECCOMP + seccomp struct zeroed)

После перезаписи cred выполняется проверка возможностей чтением.

6. Встроенный Mini ADB-клиент

src/core/miniadb.c — лёгкий клиент протокола ADB для режима bootstrap:

root@kitploit:~
1. TCP connect 127.0.0.1:5555
2. A_CNXN → connection request
3. A_AUTH → RSA token challenge
4. dlopen("libcrypto.so") → PEM_read_bio_RSAPrivateKey → RSA_sign
5. A_AUTH (AUTH_SIGNATURE) → signed response
6. A_CNXN → connection established
7. A_OPEN "shell:/data/local/tmp/a/e" → full exploit

Поддерживает алгоритмы подписи SHA-1 и SHA-256.


Структура файлов

root@kitploit:~
ghostlock-oneplus/
├── Makefile                        # Build configuration (NDK cross-compile)
├── README.md                       # Documentation
├── src/
│   ├── core/                       # Core exploit code
│   │   ├── main.c                  # Entry point: two-stage write + root shell
│   │   ├── fops.c                  # FOPS/CFI mode: pselect route, PI write, KASLR leak
│   │   ├── util.c                  # Utilities: heap spray, KASLR, kernel R/W primitives
│   │   ├── slide.c                 # SLIDE mode: boot_id KASLR leak + pselect route
│   │   ├── pipe.c                  # Pipe buffer physical memory R/W (physrw)
│   │   ├── root.c                  # Cred overwrite, seccomp clear, root child mgmt
│   │   ├── miniadb.c              # Built-in ADB client (TCP + RSA auth)
│   │   ├── common.h               # Global macros, structs, declarations, constants
│   │   ├── target.h               # Target memory layout / struct offsets / KASLR params
│   │   ├── offset.h               # Compile-time target config bridge (#include TARGET_CONFIG_H)
│   │   └── kernelsnitch/          # KernelSnitch — mm_struct address leak
│   │       ├── kernelsnitch.h     # Core algorithm: futex hash collision + brute-force
│   │       ├── futex_hash.h       # Futex hash function
│   │       ├── timeutils.h        # CPU timestamp measurement (RDTSC)
│   │       └── utils.h            # Helper macros (pr_info / SYSCHK / ASSERT etc.)
│   └── devices/                   # Device offset tables
│       ├── offsets.h              # Aggregate all device offsets (lookup table + sentinel)
│       ├── ace6t/offsets.h        # OnePlus Ace 6T offsets (2 kernel versions)
│       └── op15/offsets.h         # OnePlus 15 offsets (1 kernel version)
└── tools/                         # Offset extraction toolchain
    ├── extract_target.py          # Extract kallsyms global symbol offsets (28 items)
    └── extract_btf.py             # Extract BTF struct field offsets (57 items)

Обзор основных модулей


Добавление новых устройств

Нужен только boot.img целевого устройства — не требуется root или доступ к устройству.

Извлечение смещений

root@kitploit:~
# 1. Extract kernel from boot.img
python -c "import struct; d=open('boot.img','rb').read(); \
           open('kernel','wb').write(d[4096:4096+struct.unpack_from('<I',d,8)[0]])"

# 2. Get kallsyms (root: adb shell su -c 'cat /proc/kallsyms' > kallsyms.txt)
#    Or from vmlinux: nm vmlinux > kallsyms.txt

# 3. Extract global symbol offsets
python tools/extract_target.py     # 28 offsets, auto-verified

# 4. Extract struct field offsets
python tools/extract_btf.py kernel  # 57 offsets, auto-verified

Шаги адаптации

  1. Создайте src/devices/<name>/offsets.h (см. ace6t/offsets.h)
  2. Подключите его через #include в src/devices/offsets.h
  3. Обновите KIMAGE_TEXT_BASE и раскладку памяти в src/core/target.h, если необходимо
  4. Пересоберите

Настройка для разных устройств


FAQ

В: Нет вывода при запуске?

Убедитесь, что вы работаете в ADB-оболочке. В контексте приложения требуется --bootstrap.

В: «no offsets for this kernel»?

Ваша версия ядра пока не поддерживается. Следуйте инструкциям в разделе Добавление новых устройств, чтобы извлечь смещения и пересобрать.

В: Write 1 постоянно не удаётся?

  • Убедитесь, что закрепление выполняется на правильном ядре ЦП (макрос CORE)
  • Настройте тайминг PSELECT_ENTER_DELAY_USEC
  • Проверьте наличие мешающих процессов

В: perf в Write 2 возвращает 0?

  • Проверьте, не блокирует ли seccomp perf_event_open (используйте --bootstrap в контексте приложения)
  • Убедитесь, что обход KASLR прошёл успешно (kaslr_base корректен)

В: KernelSU не загружается?

  • Убедитесь, что ksud существует и исполняемый
  • Проверьте целостность файла сетевой политики (исправление load_policy)

Лицензия

Только для авторизованных исследований в области безопасности и образовательных целей.

Скачать инструмент
УстройствоКодовое имяSoCЯдроПрошивкаСтатус
OnePlus Ace 6TPLR110SM8845 (Snapdragon 8s Elite)6.12.38-android16-5-...-ab14275539-4kColorOS 16.0.2.403✅ Проверено
OnePlus Ace 6TPLR110SM8845 (Snapdragon 8s Elite)6.12.38-android16-5-...-ab14552068-4kColorOS 16.0.8.301✅ Проверено
OnePlus 15PLK110SM8845 (Snapdragon 8s Elite)6.12.23-android16-5-...-ab14541642-4k—✅ Проверено
libksud.so
CI ReleaseСкачать с ReSukiSU CI (ksud-aarch64-linux-android.zip)
ТипКоличествоИзвлечение
Глобальные символы kallsyms28tools/extract_target.py
Поля структур BTF57tools/extract_btf.py
Производные значения9Вычисляются автоматически
Фиксированные константы12Захардкожено
СтруктураПоляНазначение
task_struct17Дескриптор процесса, cred, seccomp
rt_mutex_waiter6Цель подделки UAF
cred4Учётные данные, возможности
seccomp3Состояние фильтра seccomp
pipe_inode_info11Операции с буферами pipe
file_operations13Поддельная таблица fops
mm_struct1Владелец дескриптора памяти
МодульФайл(ы)Ответственность
Точка входаmain.cРазбор CLI, диспетчеризация W1/W2, поток bootstrap
Маршрут PIfops.c / slide.cРаскладка стека pselect/select, манипуляция цепочкой futex PI
KASLRutil.c / fops.c / slide.cДвухрежимный обход: утечка boot_id + утечка таблицы fops
Распыление кучиutil.cВыделение страниц порядка 3, распыление SKB, компоновка поддельных объектов
Phys R/Wpipe.cПерехват буферов pipe, произвольный доступ к физической памяти
Повышение привилегийroot.cПерезапись cred, проверка возможностей, очистка seccomp
ADBminiadb.cЛёгкий клиент протокола ADB, RSA-аутентификация
Механизм утечкиkernelsnitch/Коллизия хеша futex для определения расположения mm_struct
Параметр
Примечания
VA_BITS48 против 39 → обновите раскладку памяти в target.h
ТаймингиНастройте параметры PSELECT_* в common.h
AshmemРеализация C или Rust → обновите сопоставление символов в extract_target.py
SecureguardНа устройствах не от OnePlus развёртывание может упроститься