
Exploit di escalation dei privilegi locali per Xiaomi XIG04 (Android 12) tramite CVE-2026-43499 kernel use-after-free. Tecnica di root diretta solo dati con brute-forcing del tag MTE per rooting del proprietario del dispositivo.
aristotle (au/KDDI Xiaomi XIG04)Escalatazione locale dei privilegi (tmp-root) per au/KDDI Xiaomi "aristotle" (XIG04) su Android 12, tramite CVE-2026-43499. Si tratta di una primitiva di rooting del proprietario del dispositivo: radica il tuo telefono (ad es. per riattivare ADB quando le opzioni sviluppatore non sono raggiungibili).
Questo è un porting per aristotle dell'implementazione originale: https://github.com/x-spy/CVE-2026-43499-popsicle — che ha come target il Xiaomi 17 / Pro / Ultra (popsicle, Snapdragon, Android 16, kernel 6.12.23). Tutti i crediti per la tecnica di exploit vanno all'originale; questo fork lo riconfigura solo per un dispositivo e una generazione di kernel diversi.
Scopo: il tuo XIG04 con
Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKD. Non è un exploit generico 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 è un use-after-free nel percorso Futex-PI del kernel Linux: remove_waiter() in kernel/locking/rtmutex.c opera su current invece di waiter::task durante il rollback del proxy-lock da futex_requeue(), lasciando un pi_blocked_on sospeso. È un bug vecchio e di lunga durata (colpisce Linux 2.6.39 – 6.18.x), quindi il kernel 5.10.136 qui è nel range (CONFIG_FUTEX_PI=y, CONFIG_RT_MUTEXES=y). L'exploit utilizza un "direct-root" solo dati (scambia cred → init_cred, inverte l'enforcing di SELinux) e forza brute i tag MTE per sopravvivere all'hardening del dispositivo (KASAN_HW_TAGS, MTE, , ).
L'originale ha come target Snapdragon / Android 16 / kernel 6.12; aristotle è MediaTek / Android 12 / kernel 5.10, quindi il porting ricava tutto ciò che è specifico del dispositivo:
rt_mutex_waiter è il vecchio layout piatto 5.10 (nessun rt_waiter_node annidato, nessun wake_state/ww_ctx). Le tabelle dei finti waiter in source/src/{slide,fops}.c e source/src/util.c sono ricostruite da 13 parole a 10.xbl_config. KASLR viene sconfitto dinamicamente (info-leak del kernel in slide.c); le due costanti fisiche che l'originale prendeva dall'XBL di Qualcomm sono sostituite da una base DRAM statica (0x40000000, dal device tree) più memstart_addr / kimage_voffset in esecuzione.ARISTOTLE_CVE43499_PORT.md.Un source/src/target.h misurato per XIG04 è già stato committato, quindi puoi compilare direttamente. Per rigenerarlo da un'immagine di boot, usa il generatore aristotle (nessun --xbl-config; emette le RVA di memstart_addr/kimage_voffset per uso dinamico):
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
(I tre ancoraggi e il kernel-phys-load sono i valori incorporati nell'header committato; vedere ARISTOTLE_CVE43499_PORT.md per come sono stati ottenuti.)
Richiede Python 3 e Android NDK (r29). API=31 è richiesto affinché il payload venga caricato su Android 12:
make -C source clean preload API=31
Se l'NDK non viene rilevato automaticamente:
NDK_ROOT=/path/to/android-ndk make -C source clean preload API=31
Artifact finale:
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'
In caso di successo:
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 incorpora e auto-installa il proprio client su + demone quando viene caricato, quindi non è necessario un binario su separato.
Stato: il porting è completo dal punto di vista dell'analisi statica ma non ancora validato su hardware. Convalida prima il trigger del crash, poi il root, sul tuo dispositivo. Le voci di ottimizzazione specifiche del kernel (
MM_ORDER,P0_KERNEL_PHYS_LOAD, il comportamento del flat-waiter) sono elencate inARISTOTLE_CVE43499_PORT.md.
CFISCS