Syerain
← 返回列表

折腾:利用CVE-2026-43499实现aarch64设备临时提权root的尝试

背景

前言

笔者于2023年618购入的一台安卓手机iQOO Neo7 SE,近年来续航逐渐跟不上了。于是试图优化系统后台和性能调度等,这自然需要先获得root权限了。

在排除了若干已修复或不适用的漏洞后,笔者确定了CVE-2026-43499作为突破点。

在 ~~赛博黑市~~ 闲鱼斥巨资¥4.90购买得到了设备同版本的官方卡刷包与线刷包;意外发现vivo在 opensource.vivo.com 开源了各设备的内核源码,并且其中iQOO Neo7 SE 放出的 OriginOS5 内核源码版本恰好与笔者设备的一致。这无疑是巨大的帮助。

材料

设备

iQOO Neo7 SE

  • aarch64 armv8
  • android15 (android12-dirty)
  • OriginOS 5 (15.0)
  • Liunx kernel 5.10.233
  • platform MT6895
  • soc MT6896Z/CZA

固件

  • 官方卡刷包(黄鱼)

  • 官方线刷包(黄鱼)

  • 官方内核源码(https://opensource.vivo.com)

漏洞

  • CVE-2026-43499 GhostLock (本文) GhostLock 是一个潜伏期长达 15 年的 Linux Kernel futex UAF(Use-After-Free)漏洞,编号 CVE-2026-43499。攻击者通过构造 PI-futex 依赖循环触发竞态条件,可在启用 CONFIG_FUTEX_PI=y 的内核上实现本地权限提升。

  • CVE-2026-31431 CopyFail (不适用)

  • CVE-2025-38352 DirtyFrag (理论适用于arm32设备,但x86-64亦有成功案例)

  • CVE-2026-43284 xfrm-ESP (不适用)

  • CVE-2026-43500 RxRPC (不适用)

参考资料

  • https://gitee.com/ytngtaoaaa/allroot

流程

前置验证

为方便阅读,终端输出已手动换行

相关数据已作脱敏

  • 检查版本信息
❯ adb shell
PD2238:/ $ uname -a
Linux localhost 5.10.233-android12-9-gc6096b60235f-dirty #1 SMP PREEMPT Fri Dec 5 06:49:18 UTC 2025 aarch64 Toybox
  • 检查 LD_PRELOAD 可用性
PD2238:/ $ LD_PRELOAD=/data/local/tmp/__not_exist__.so id
CANNOT LINK EXECUTABLE "id": library "/data/local/tmp/__not_exist__.so" not found: needed by main executable
  • 检查SELinux enforcing 状态
PD2238:/ $ getenforce
Enforcing
  • 检查 CONFIG_FUTEX 相关状态
PD2238:/ $ zcat /proc/config.gz 2>/dev/null | grep -E 'CONFIG_FUTEX' || echo "NO_CONFIG_GZ"
CONFIG_FUTEX=y
CONFIG_FUTEX_PI=y
  • 检查 /proc/cmdline
PD2238:/ $ cat /proc/cmdline
 console=tty0 root=/dev/ram rcupdate.rcu_expedited=1 
 transparent_hugepage=never 8250.nr_uarts=2 vmalloc=400M swiotlb=noforce 
 log_buf_len=2m firmware_class.path=/vendor/firmware pelt=8 console=tty0 
 root=/dev/ram loop.max_part=7 mtk_printk_ctrl.disable_uart=1 
 ramoops.mem_address=0x48090000 ramoops.mem_size=0xe0000 
 ramoops.pmsg_size=0x10000 ramoops.console_size=0x40000 usb2jtag_mode=0 
 bootopt=64S3,32N2,64N2 cgroup.memory=nokmem 
 product.version=PD2238_A_15.2.19.0.W10 
 fingerprint.abbr=12/XXXX.XXXXXX.XXX region_ver=W10 product.solution=MTK 
 buildvariant=user root=/dev/ram vivolog_flag=0 tier=0 bbk_dp=0 
 rtc_reset=0 product_state=0 arm64.nomte lcm_software_id=0xa9 
 lcm_imei=00000000000000000000000000000000 bootconfig
  • 检查 /dev/block
PD2238:/ $ ls -l /dev/block/by-name/ 2>/dev/null | grep -iE "boot|vendor_boot|dtbo"
lrwxrwxrwx 1 root root 16 2026-08-05 12:05 boot -> /dev/block/sdc60
lrwxrwxrwx 1 root root 16 2026-08-05 12:05 boot_para -> /dev/block/sdc32
lrwxrwxrwx 1 root root 16 2026-08-05 12:05 dtbo -> /dev/block/sdc64
lrwxrwxrwx 1 root root 16 2026-08-05 12:05 init_boot -> /dev/block/sdc62
lrwxrwxrwx 1 root root 16 2026-08-05 12:05 vendor_boot -> /dev/block/sdc61
PD2238:/ $ exit