背景
前言
笔者于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