Sploitus

Exploit for ghostlock-a17

kitploit · 2026-08-19

Exploit Code

MARKDOWN426 lines
## 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 предоставлен **только для образовательных целей и авторизованных исследований безопасности**.

Используйте его только на устройствах и в окружениях, которыми вы владеете или на тестирование которых имеете явное разрешение.