
本项目是基于 CVE-2025-21479(Qualcomm Adreno A7xx GPU 固件逻辑漏洞)的本地提权研究成果, 目标设备为 vivo iQOO Neo 9(Snapdragon 8 Gen 2 / Adreno 740 / A7xx 系列 GPU)。
仓库仅保留可直接使用的二进制产物:利用程序、KernelSU 内核模块、用户态工具、测试内核模块与 APK。
⚠️ 免责声明 本项目仅用于安全研究与学习目的。请仅在自有设备上进行测试。 请勿将相关技术与产物用于任何未授权设备或非法用途,由此产生的一切后果由使用者自行承担。
CVE-2025-21479 是高通 Adreno A7xx 系列 GPU 固件微码中的权限校验逻辑缺陷:
自 A7xx 起,GPU 指令缓冲层级由 4 级扩展为 5 级(新增 IB3),但固件微码仍以 level AND 0x3 判定权限层级;
在最低特权层级(SDS / IB4)执行时 4 AND 3 == 0,被误判为最高权限的 RB 级,从而放行 CP_SMMU_TABLE_UPDATE 等特权指令;
攻击者可借此重配 GPU 一级页表,获得任意物理内存读写原语,进而绕过 KASLR 等防护,篡改内核数据(如 selinux_state)并完成提权。
修复:Qualcomm 2025 年 6 月安全公告(GPU 固件 v675 → v676,掩码由 0x3 改为 0x7)。
影响范围:搭载 Adreno A7xx GPU(如 Snapdragon 8 Gen 1/2)且安全补丁在修复前的设备。
本项目的利用链:GPU 任意物理内存读写 → KASLR 泄露 → SELinux 置为 permissive → 内联 hook 建立 root 守护进程(rootd),
并在此基础上加载 KernelSU(kernelsu-vivo.ko)实现长效 root 管理。
├── exploit/ # 漏洞利用与客户端工具
│ ├── exploit_vivo_neo9 # 主利用程序(自包含,含 rootd 守护进程,每次开机运行一次)
│ ├── exploit_vivo_neo9_ndk # NDK 重新编译的利用程序(精简版)
│ ├── exploit_vivo_neo9_ndk13 # NDK 13 编译的利用程序(精简版)
│ ├── exploit0_selinux_only # 仅做 SELinux permissive 的变体(不注入 rootd)
│ └── client/ # rootd 客户端工具(部署到 /data/local/tmp 使用)
│ ├── rootc # root 命令客户端:通过文件通道与 rootd 通信执行命令
│ ├── u0 # 真 root (euid=0) 执行器,绕过 euid=2000 受限接口
│ ├── su # su 增强版包装脚本(rootc/u0 双模式,见下文)
│ └── shim.so # 共享库 shim(配合宿主进程注入执行)
├── kernel-module/
│ └── kernelsu-vivo.ko # 适配 vivo 内核的 KernelSU 内核模块(作者 weishu)
├── userspace/ # KernelSU 用户态工具
│ ├── ksud # KernelSU 守护进程(负责加载/管理 kernelsu.ko)
│ ├── su_ksu # KernelSU 的 su 二进制(由 su_patched.c 编译)
│ ├── asuid # 以指定 Android UID 执行命令的工具(asuid <uid> <cmd...>)
│ ├── ksu_feature_probe # KernelSU 功能探测工具
│ ├── ksu_probe / ksu_probe2 # KernelSU 特性/环境探测工具
│ └── su_test2 # su 功能测试工具
├── test-modules/ # 内核测试/辅助模块(供调试与软重启兼容使用)
│ ├── ksu_testmod.ko # KernelSU 测试模块
│ ├── proctest.ko / puretest.ko # 进程相关测试模块
│ ├── unpatch/unpatch.ko # 恢复 cap_bprm_creds_from_file(软重启兼容)
│ └── vrpatch/vrpatch.ko # 中和 vr.ko 的 root 检测(软重启兼容)
├── KSUOneTap.apk # 一键注入 APK(内嵌利用程序 + kernelsu-vivo.ko + ksud + su + 部署脚本)
├── resukisu-manager.apk # KernelSU 管理器 APK(ReSukiSU,用于授权管理)
└── README.md
提示:GPU 利用为概率性(依赖内存喷洒),一次失败可重试或重启后重试。
KSUOneTap.apk(需要 Shizuku 环境提供权限);deploy_onedevice.sh 完成:部署利用程序 → 运行利用获得 root → 加载
kernelsu-vivo.ko → 启动 ksud → 安装 su_ksu;resukisu-manager.apk 作为 KernelSU 管理器,进行 root 授权管理。以 adb 为例:
# 1. 推送并运行利用程序(每次开机运行一次)
adb push exploit/exploit_vivo_neo9 /data/local/tmp/
adb shell 'chmod 755 /data/local/tmp/exploit_vivo_neo9; /data/local/tmp/exploit_vivo_neo9'
# 2. 成功后:SELinux 置为 permissive,rootd 守护进程在 /data/local/tmp 就绪(rootd_ready.txt)
# 推送客户端工具
adb push exploit/client/su exploit/client/rootc exploit/client/u0 /data/local/tmp/
adb shell 'chmod 755 /data/local/tmp/su /data/local/tmp/rootc /data/local/tmp/u0'
# 3. 使用 su(默认 rootc 模式;需 euid=0 时加 --u0)
adb shell
su -c 'id'
su --u0 -c 'id'
# 4. 加载 KernelSU 模块并启动守护进程
adb push kernel-module/kernelsu-vivo.ko userspace/ksud userspace/su_ksu /data/local/tmp/
adb shell '/data/local/tmp/ksud'
# 之后以 su_ksu 作为 KernelSU 的 su 使用
selinux_state 执行 RMW 写入,将 SELinux 置为 permissive;kprobe_dispatcher 打补丁,禁用 vr.ko 的 kprobe 检测(vivo 反 root 监控);/data/local/tmp 建立 rootd 守护进程(rootd_cmd / rootd_out / rootd_ready.txt 文件通道),供客户端请求执行命令。rootc <命令> 或 rootc B64:<base64>,经文件通道交给 rootd 以
euid=2000 + 全 capabilities 执行(此设计用于规避 vr.ko 的反 root 限制);su --u0 -c "命令",以 euid=0 真 root 执行,用于调用需要真 root 的接口;su 是包装脚本,默认注入 PATH=/data/local/tmp:$PATH 便于短名调用工具,
支持 -c/--command、--u0/-0、-s/--shell、--no-path 等参数,并兼容 stdin 交互;LD_PRELOAD 方式注入宿主进程执行自定义代码的共享库。kernelsu-vivo.ko:针对该 vivo 内核(5.15.178)编译的 KernelSU 内核模块(vermagic 与内核完全匹配);ksud:KernelSU 守护进程,负责加载 kernelsu.ko(按 KMI 版本自动匹配)、管理 su 与授权;su_ksu:KernelSU 的 su 程序,配合管理器进行 root 授权;asuid:以指定 UID 执行命令(asuid <uid> <cmd...>),用于测试/降权场景;ksu_feature_probe、ksu_probe、ksu_probe2、su_test2 用于检测 KernelSU 功能与运行环境。setprop ctl.restart zygote 软重启可保留已获得的 root 状态,
此时需配合 vrpatch.ko / unpatch.ko 维持兼容;| 项目 | 说明 |
|---|
| 目标设备 | vivo iQOO Neo 9 |
| SoC / GPU | Snapdragon 8 Gen 2 / Adreno 740(A7xx 系列,受 CVE-2025-21479 影响的固件版本) |
| 内核 | 5.15.178-gaacdc35637c4-dirty(vivo 定制,aarch64,支持 mod_unload / modversions) |
| 架构 | 所有 ELF 均为 64 位 aarch64(Android) |
| 安全补丁 | 需在 GPU 固件修复(v676)之前,否则漏洞已失效 |
| 模块 | 用途 |
|---|
ksu_testmod.ko | KernelSU 内核模块测试 |
proctest.ko / puretest.ko | 进程行为/纯净度测试 |
vrpatch.ko | 中和 vr.ko 的 root 检测(软重启后保持 root 兼容) |
unpatch.ko | 恢复 cap_bprm_creds_from_file 挂钩(软重启兼容) |