
Cadena de exploits de prueba de concepto para CVE-2026-43499 que afecta a dispositivos Android OPPO MT6835, con carga previa de payload, sistema de compilación y notas de análisis para investigación defensiva.
GhostLock: Vulnerabilidad de uso después de liberación (Use-After-Free) en futex PI del kernel de Linux, CVE-2026-43499. Los atacantes explotan bucles de dependencia de PI-futex para desencadenar una condición de carrera, logrando escalada de privilegios local en kernels con
CONFIG_FUTEX_PI=y.Objetivo: OPPO PLS120 (OP5E1C) — Android 17, kernel
5.15.180-android13-8-o-g7b9cfca06464Entorno de análisis: Ubuntu 24.04 x86_64 + Android NDK r29 (clang 21.0.0, API 35)
Repositorio fuente: NebuSec/CyberMeowfia — IonStack/CVE-2026-43499
Este proyecto investiga la viabilidad de explotar GhostLock (CVE-2026-43499) para obtener privilegios de root en un dispositivo OPPO PLS120 (OP5E1C). Tras verificar sistemáticamente todas las rutas de fuga de KASLR conocidas, se confirma que la combinación de endurecimiento de seguridad del dispositivo constituye una cadena de protección imposible de eludir.
| Fase | Estado | Descripción |
|---|---|---|
| Fase 1: Análisis de boot.img y extracción de símbolos | ✅ Completado | Extraer boot.img del paquete OTA → reconstrucción de la tabla de símbolos con vmlinux-to-elf (159.668 símbolos) |
| Fase 2: Compilación de preload.so | ✅ Completado | Compilación cruzada con Android NDK r29, mecanismo de registro en disco en tiempo real forzado |
| Fase 3: Diagnóstico de fallos y corrección iterativa | 🔄 En curso | Se han corregido MM_STRUCT_SZ, el soporte de MTE y la lógica de omisión de SLIDE |
El endurecimiento de seguridad del OPPO PLS120 bloquea por completo la cadena de explotación:
| Elemento de endurecimiento | Impacto |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | Impide la colisión de slab de KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | Las etiquetas de dirección aumentan la complejidad del bruteforce |
CONFIG_CFI_CLANG=y | Integridad del flujo de control |
| Política del dominio shell de SELinux | Bloquea perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | Bloquea la ruta PR_SET_MM_MAP |
| Corrección de wchan backportada | Impide que /proc/<pid>/stat filtre VA del kernel |
| Solución | Estado | Motivo |
|---|---|---|
| perf_event_open callchain | ❌ | EACCES (bloqueado por el dominio shell de SELinux) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (campo 35 de /proc/<pid>/stat) | ❌ | El kernel ya tiene aplicada la corrección de v5.16 (devuelve 1 en lugar de VA del kernel) |
| Canal lateral SLIDE (sobrescritura de boot_id) | ❌ | El módulo nfulnl no se puede cargar |
| Recuperación de pila PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (temporización de hash de futex) | ⚠️ Éxito ocasional | El ruido de temporización big.LITTLE afecta la estabilidad |
SLIDE_MAX_ATTEMPTS=1!route_signal, permitiendo 24 reintentosEste proyecto investiga la viabilidad de explotar GhostLock (CVE-2026-43499) para la escalada de privilegios de root en un dispositivo OPPO PLS120 (OP5E1C). Tras probar sistemáticamente todas las rutas de fuga de KASLR conocidas, la configuración de endurecimiento de seguridad del dispositivo forma una cadena de defensa imposible de eludir contra este exploit.
| Fase | Estado | Descripción |
|---|---|---|
| Fase 1: Análisis de boot.img | ✅ Completada | Se extrajo boot.img de la OTA → reconstrucción de símbolos vmlinux-to-elf (159.668 símbolos) |
| Fase 2: Compilación de preload.so | ✅ Completada | Compilado de forma cruzada con Android NDK r29, forzando el registro en disco en tiempo real |
| Fase 3: Diagnóstico e iteración | 🔄 En curso | Se corrigieron MM_STRUCT_SZ, compatibilidad con MTE, lógica de omisión de SLIDE |
El OPPO PLS120 bloquea la cadena de explotación en múltiples capas:
| Característica de endurecimiento | Impacto |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | Bloquea la colisión de slabs de KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | Las etiquetas de dirección aumentan la complejidad del bruteforce |
CONFIG_CFI_CLANG=y | Integridad del flujo de control |
| Política del dominio shell de SELinux | Bloquea perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | Bloquea la ruta PR_SET_MM_MAP |
| Backport del fix de wchan | Bloquea la fuga de VA del kernel vía /proc/<pid>/stat |
| Método | Estado | Motivo |
|---|---|---|
| callchain de perf_event_open | ❌ | EACCES (dominio shell de SELinux) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (campo 35 de /proc/<pid>/stat) | ❌ | El kernel tiene el backport del fix de v5.16 (devuelve 1 en lugar del VA del kernel) |
| Canal lateral SLIDE (sobrescritura de boot_id) | ❌ | El módulo nfulnl no se puede cargar |
| Reclamación de pila PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (temporización del hash de futex) | ⚠️ Intermitente | El ruido de temporización de big.LITTLE afecta la estabilidad |
SLIDE_MAX_ATTEMPTS=1!route_signal, lo que permite 24 reintentos/home/ubuntu/CyberMeowfia/
├── devices/ # Target device artifacts (OTA zip, config.gz, etc.)
├── work_bootimg/ # boot.img analysis output
│ └── oppo/ # OPPO-specific kernel data
│ ├── kernel.dec # Decompressed ARM64 Image (47MB)
│ ├── vmlinux_extracted.elf # Reconstructed vmlinux with symbols (159,668)
│ ├── kallsyms_oppo.txt # Full symbol table
│ └── kernel_config_oppo # Kernel .config (189KB)
├── IonStack/CVE-2026-43499/exploit/ # Exploit source code
│ ├── src/ # Source files (slide.c, fops.c, main.c, etc.)
│ │ ├── kernelsnitch/ # KernelSnitch futex hash timing module
│ │ └── targets/
│ │ └── oppo-pls120-BP2A.250605.015/ # OPPO-specific target configuration
│ └── build/ # Compiled binaries
├── unpack_bootimg.py # Python boot.img unpacker (v3/v4)
├── report.md # Phase 1 analysis report (Chinese)
├── GhostLock_CVE202643499_OPPO_PLS120_研究报告.md # Full research report (Chinese, 620 lines)
└── CVE202643499.txt # Research plan document