针对小米 XIG04(Android 12)的本地权限提升利用,通过 CVE-2026-43499 内核释放后重用漏洞。采用仅数据直接 root 技术,结合 MTE 标签暴力破解,用于设备所有者 root。
aristotle (au/KDDI 小米 XIG04)针对搭载Android 12的au/KDDI 小米 "aristotle" (XIG04) 的本地权限提升(tmp-root),利用CVE-2026-43499。这是一个设备所有者root原始方法:用于root你自己的手机(例如,当开发者选项无法访问时重新启用ADB)。
这是上游实现的一个aristotle 移植:https://github.com/x-spy/CVE-2026-43499-popsicle —— 该实现针对小米17 / Pro / Ultra(popsicle,骁龙,Android 16,内核 6.12.23)。漏洞利用技术的所有功劳归功于上游;此分支仅将其重新定位到不同的设备和内核版本。
适用范围:你自己运行的 XIG04
Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKD。
并非通用或远程漏洞利用。
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 是 Linux 内核 Futex-PI 路径中的一个释放后使用漏洞:在 futex_requeue() 的代理锁回滚过程中,kernel/locking/rtmutex.c 中的 remove_waiter() 操作的是 current 而非 waiter::task,留下一个悬空的 pi_blocked_on。这是一个古老且长期存在的漏洞(影响 Linux 2.6.39 – 6.18.x),因此这里的 5.10.136 内核在其影响范围内(CONFIG_FUTEX_PI=y,CONFIG_RT_MUTEXES=y)。该漏洞利用采用纯数据的“直接 root”方法(交换 cred → init_cred,翻转 SELinux 强制执行),并通过暴力破解 MTE 标签来绕过设备的安全加固(KASAN_HW_TAGS、MTE、CFI、)。
rt_mutex_waiter 是旧的平面 5.10 布局(没有嵌套的 rt_waiter_node,没有 wake_state/ww_ctx)。source/src/{slide,fops}.c 和 source/src/util.c 中的伪造 waiter 表从 13 个词重建为 10 个词。xbl_config。 KASLR 被动态击败(在 slide.c 中通过内核信息泄露);上游从高通 XBL 中获取的两个物理常量被替换为静态 DRAM 基地址(0x40000000,来自设备树)以及运行时 memstart_addr / kimage_voffset。ARISTOTLE_CVE43499_PORT.md。针对 XIG04 测量得到的 source/src/target.h 已提交,因此可以直接构建。要从 boot 镜像重新生成,请使用 aristotle 生成器(没有 --xbl-config;它会输出 memstart_addr/kimage_voffset RVA 以供动态使用):
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
(这三个锚点和 kernel-phys-load 是已提交头文件中固定的值;有关如何获取它们,请参见 ARISTOTLE_CVE43499_PORT.md。)
需要 Python 3 和 Android NDK (r29)。需要 API=31 以使载荷在 Android 12 上加载:
make -C source clean preload API=31
如果 NDK 未自动检测到:
NDK_ROOT=/path/to/android-ndk make -C source clean preload API=31
最终产物:
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'
成功时:
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 在加载时会嵌入并自安装自己的 su 客户端和守护进程,因此不需要单独的 su 二进制文件。
状态:该移植从静态分析角度看代码是完整的,但尚未在硬件上验证。请先在你自己的设备上验证崩溃触发,然后再进行 root。内核特定的调优项(
MM_ORDER、P0_KERNEL_PHYS_LOAD、平面 waiter 行为)列在ARISTOTLE_CVE43499_PORT.md中。
SCS