
Exploit de escalada de privilegios local para Xiaomi XIG04 (Android 12) mediante CVE-2026-43499 (uso después de liberación del kernel). Técnica de root directo solo de datos con fuerza bruta de etiquetas MTE para enraizamiento del propietario del dispositivo.
aristotle (au/KDDI Xiaomi XIG04)Escalada de privilegios local (tmp-root) para el au/KDDI Xiaomi "aristotle" (XIG04) en Android 12, a través de CVE-2026-43499. Es una primitiva de root del propietario del dispositivo: enraíza tu propio teléfono (por ejemplo, para reactivar ADB cuando las opciones de desarrollador son inaccesibles).
Este es un port para aristotle de la implementación ascendente: https://github.com/x-spy/CVE-2026-43499-popsicle — que apunta al Xiaomi 17 / Pro / Ultra (popsicle, Snapdragon, Android 16, kernel 6.12.23). Todo el crédito de la técnica de exploit corresponde al ascendente; este fork solo lo redirige a un dispositivo y generación de kernel diferentes.
Alcance: tu propio XIG04 ejecutando
Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKD. No es un exploit de propósito general o remoto.
device : aristotle (au/KDDI XIG04), MediaTek, Android 12
kernel : 5.10.136-android12-9-00020-gc9f59ef34367-ab9585114 (VA=39, 4K pages, KASLR)
CVE-2026-43499 es un use-after-free en la ruta Futex-PI del kernel de Linux: remove_waiter() en kernel/locking/rtmutex.c opera en current en lugar de waiter::task durante la reversión del proxy-lock desde futex_requeue(), dejando un pi_blocked_on colgante. Es un error antiguo y de larga duración (afectó a Linux 2.6.39 – 6.18.x), por lo que el kernel 5.10.136 aquí está en el rango (CONFIG_FUTEX_PI=y, CONFIG_RT_MUTEXES=y). El exploit utiliza un "direct-root" solo de datos (intercambiar cred → init_cred, desactivar SELinux forzado) y fuerza bruta en etiquetas MTE para sobrevivir al endurecimiento del dispositivo (KASAN_HW_TAGS, MTE, , ).
Upstream apunta a Snapdragon / Android 16 / kernel 6.12; aristotle es MediaTek / Android 12 / kernel 5.10, por lo que el port re-deriva todo lo específico del dispositivo:
rt_mutex_waiter es el diseño plano antiguo 5.10 (sin rt_waiter_node anidado, sin wake_state/ww_ctx). Las tablas de fake-waiter en source/src/{slide,fops}.c y source/src/util.c se reconstruyen de 13 palabras a 10.xbl_config. KASLR se derrota dinámicamente (filtración de información del kernel en slide.c); las dos constantes físicas que upstream tomó de Qualcomm XBL se reemplazan por una base DRAM estática (0x40000000, del árbol de dispositivos) más memstart_addr / kimage_voffset en tiempo de ejecución.ARISTOTLE_CVE43499_PORT.md.Un source/src/target.h medido para XIG04 ya está comprometido, por lo que puedes compilar directamente. Para regenerarlo a partir de una imagen de arranque, usa el generador aristotle (sin --xbl-config; emite RVAs memstart_addr/kimage_voffset para uso dinámico):
python3 gen_aristotle_target.py \
--boot boot.img \
--pselect-shift 0 \
--loggers 0xffffffc012771380 \
--boot-id-data 0xffffffc012886cf8 \
--kernel-phys-load 0x40080000 \
-o source/src/target.h
(Los tres anclajes y el kernel-phys-load son los valores integrados en el encabezado comprometido; ver ARISTOTLE_CVE43499_PORT.md para cómo se obtuvieron.)
Requiere Python 3 y Android NDK (r29). API=31 es requerido para que el payload se cargue en Android 12:
make -C source clean preload API=31
Si el NDK no se detecta automáticamente:
NDK_ROOT=/path/to/android-ndk make -C source clean preload API=31
Artefacto final:
source/build/bin/preload.so
adb push source/build/bin/preload.so /data/local/tmp/preload.so
adb shell 'chmod 0644 /data/local/tmp/preload.so'
adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/true'
adb shell '/data/local/tmp/su -c id'
En caso de éxito:
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
direct-root-summary root=1 id=1 su=1/... selinux=1->0 uid=0 euid=0 gid=0 egid=0
preload.so incrusta y auto-instala su propio cliente su + demonio al cargarse, por lo que no se necesita un binario su separado.
Estado: el port está completo en código según análisis estático pero aún no validado en hardware. Valida el disparador de crash primero, luego el root, en tu propio dispositivo. Los elementos de ajuste específicos del kernel (
MM_ORDER,P0_KERNEL_PHYS_LOAD, el comportamiento del flat-waiter) se listan enARISTOTLE_CVE43499_PORT.md.
CFISCS