
Honor WIN RT (AAK-AN00) CVE-2026-43499 root temporal - notas de investigación
(todo escrito por deepseek, yo no entiendo nada)
Bootloader del dispositivo bloqueado permanentemente (
ro.oem_unlock.supportedvacío), sin fastboot, sin su persistente, sin Magisk. El único camino que queda es una vulnerabilidad del kernel. Este repositorio documenta el proceso completo desde «¿se puede atacar?» hasta «qué tan estable es después de atacar».
Naturaleza: root temporal, se pierde al reiniciar.
Este repositorio documenta un proceso de investigación de seguridad realizado en un dispositivo de mi propiedad, con el objetivo de comprender las causas y los límites de estabilidad de una condición de carrera PI en el kernel.
La única ruta que funcionó es:
CVE-2026-43499 (condición de carrera futex PI write-what-where) + portador rt_sigreturn
→ inyección LD_PRELOAD en proceso del dominio shell
→ dos etapas: primero poner SELinux en Permissive, luego cambiar task->real_cred / cred a init_cred
→ uid=0(root) context=u:r:kernel:s0, e implantar un daemon su
Pero lo que realmente vale la pena escribir no es «cómo obtener root» — es lo que ocurre después de obtenerlo.
Lo que se obtiene no es un root estable, sino un «estado que puede detonar en cualquier momento».
La primitiva de escritura del exploit inserta un
rt_mutex_waiterfalsificado en la cadena futex PI real, y el portador de este waiter es una pila del kernel / página rociada que será reutilizada por llamadas al sistema posteriores. Por lo tanto, desde el momento en que root se establece, cualquier cambio de planificación o prioridad a nivel de sistema puede pisarlo, provocando directamente un kernel panic y reinicio. Esto no es un bug, es el precio inherente de esta técnica de explotación — verdocs/03.
Por qué es imprescindible fijar la versión del kernel: el defecto fue corregido en 6.6.140, y este dispositivo tiene 6.6.118 < 6.6.140, por lo que sigue presente;
además, todas las direcciones de símbolos del kernel del exploit y la «geometría del portador» están ancladas a este único build; al cambiar el kernel, la tabla de offsets queda invalidada de inmediato, y generalmente no es posible revertir.
┌─ Materiales ──────────────────────────────────────────┐
│ boot.img + xbl_config.elf (extraídos del firmware del dispositivo) │
│ ↓ resolución de símbolos │
│ target.h (direcciones de símbolos del kernel, verificadas byte a byte con kallsyms) │
│ ↓ compilación │
│ preload.so ──► /data/local/tmp/*.so en el dispositivo │
└────────────────────────────────────────────────────────┘
↓ inyección LD_PRELOAD
┌──────────── dos etapas (requiere dos procesos independientes) ────────────┐
│ Etapa A GW_SELINUX=1 → selinux_state.enforcing = 0 │
│ Etapa B GW_CHAIN=1 RTSIG_TASK_INIT=1 GW_SU=1 │
│ → task->real_cred ← &init_cred │
│ → task->cred ← &init_cred (realizado por el proceso "escritor preestablecido") │
│ → setresuid(0,0,0) normalización │
│ → implantar su embebido + daemon │
└─────────────────────────────────────────────────────────────┘
↓
uid=0(root) context=u:r:kernel:s0
Tres cosas que deben hacerse correctamente (si se hacen mal, se bloquea o directamente hay panic):
real_cred, luego cred. El orden inverso provoca permisos completos instantáneos y pérdida de control de los hilos.cred ≠ real_cred. En ese momento cualquier sched_setaffinity dará EPERM → bloqueo total de la ronda.
La solución correcta es hacer fork del proceso "escritor preestablecido" antes del primer corte (con credenciales limpias); el proceso padre ejecuta el primer corte, el escritor ejecuta el segundo, y ninguno emite syscalls durante el estado transitorio.alias(image) = PAGE_OFFSET | (image − KIMAGE_TEXT_BASE + Δ), estable entre reinicios;
el verdadero valor de la llamada "fase slide" es la autoverificación de la primitiva de escritura, no eludir KASLR.Framework upstream:
Linuxoid-cn/CVE-2026-43499-Poc-Analysis. Nota: esto no es GhostLock — GhostLock usa la ruta pselect, que no coincide con la geometría del punto de caída del waiter de este build, verdocs/06.
Si también estás atacando un modelo con BL bloqueado, primero piensa claramente para qué quieres root, porque en este tipo de dispositivos root probablemente sea una ventana de solo unos diez minutos. Haz una lista de las operaciones que «requieren root y deben persistir entre reinicios», ejecútalas todas de una vez, y luego
reboota un estado limpio. No intentes «eliminar los efectos secundarios» — ese es el precio de la técnica en sí misma.
| Elemento | Valor | Descripción |
|---|
| Modelo | 荣耀 WIN RT, modelo AAK-AN00 | Nombre comercial «荣耀 WIN RT» |
| SoC | Snapdragon 8 Elite SM8750-AB | Firmware no compatible con 荣耀 WIN (AAP-AN00, SM8850-AC) |
| Sistema | Android 16 / MagicOS 10 | — |
| Kernel | 6.6.118-android15-8-gf17133276a57-abogki518694926-4k | ★ Condición estricta, coincidencia carácter por carácter |
| Configuración del kernel | 4K pages, VA_BITS=39, CONFIG_FUTEX_PI=y | Prerrequisito de la geometría del portador |
| Paquete de firmware | .170 | .160 / .175 no probados |
| Bootloader | Bloqueado permanentemente | Sin fastboot / sin su persistente |
| Documento | Contenido |
|---|
| 01 · Análisis de viabilidad | Por qué solo queda el portador rt_sigreturn |
| 02 · Cadena de escalada y factores de éxito | Primitiva de escritura, cadena de seis pasos, escritor preestablecido, criterios de éxito |
| 03 · Causa real de la inestabilidad: residuo de la cadena PI | ★ Núcleo. Desconexión de red no es desconexión, es panic; incluye desensamblado del punto de fallo |
| 04 · Canal sin computadora: Shizuku | Usar rish de Shizuku en lugar de adb para lanzar el exploit |
| 05 · late-load de KernelSU | Modo de activación del LKM y por qué es el detonador más peligroso |
| 06 · Lista de callejones sin salida | Rutas probadas que no funcionaron, para evitar que otros las reintenten |
| 07 · Errores y entorno | Obtener pila de panic sin root, problemas del entorno de scripts |
| tools/ | Scripts reutilizables (versión genérica desensibilizada) |
| Fecha | Progreso |
|---|
| 09-08 | Confirmado BL bloqueado permanentemente, canal de desbloqueo OEM eliminado ⇒ abandonar la ruta oficial, pasar a la ruta de vulnerabilidad |
| 09-09 | Superada la biblioteca de firmware de posventa del fabricante, obtenido boot.img, extraído kernel y símbolos |
| 09-10 | Búsqueda de portador convergida a rt_sigreturn; escalada exitosa (20:14), uid=0 |
| 09-11 | Canal sin computadora habilitado (Shizuku); KernelSU activable; determinada la causa real de la «desconexión de red» = residuo de la cadena PI |