概述
正式开始介绍之前先简单说一下本次利用到的漏洞吧
其一:IonStack
CyberMeowfia 是安全研究团队 NebuSec 发布的内核漏洞利用 PoC 仓库,核心是 IonStack 漏洞利用链——一个无需解锁 bootloader 即可获取 Android 设备 root 权限的方案。
项目包含两个 CVE:CVE-2026-10702(浏览器入口)、CVE-2026-43499(内核提权)
我们本次用到的是 CVE-2026-43499(内核提权),利用 Linux 内核 futex PI(Priority Inheritance)机制的 stack-UAF(栈上释放后重用)漏洞。漏洞利用流程:
- 触发 UAF:通过
FUTEX_WAIT_REQUEUE_PI+FUTEX_CMP_REQUEUE_PI的竞态条件,制造 futex 死锁,导致内核栈被释放后仍被引用 - 栈喷射控制:利用多种 syscall(
prctl、setsockopt、pselect、process_vm_readv、keyctl、timerfd、futex)将可控数据喷射到被释放的内核栈上 - pipe buffer 物理读写:通过伪造 pipe buffer 结构,获得对任意物理地址的读写能力(physrw)
- KASLR 绕过:通过泄露内核代码段地址,计算内核基址偏移
- 提权:修改进程
cred结构体,将 uid/gid 设为 0,设置完整 capabilities - SELinux 禁用:将
selinux_enforcing写为 0,关闭 SELinux - seccomp 绕过:清除
TIF_SECCOMP标志和no_new_privs,移除 seccomp 过滤器 - 安装 su 守护进程:部署持久化的 root shell 守护进程
受影响设备极广,涵盖了15年来几乎所有内核版本且成功率极高
其二:高通 8e5 efisp 签名缺失
这个漏洞来自高通骁龙 8 Elite Gen5(以下简称 8e5)的启动架构变更。
高通在 8e5 平台上引入了 GBL(Google Bootloader)取代传统的 ABL。GBL 是一个标准的 UEFI 应用(.efi),存储在 efisp 分区中。理论上 XBL(eXtensible Bootloader)在加载 efisp 分区内的 EFI 文件时,应该对其进行严格的数字签名校验——但实际并没有。
简单来说就是:
- XBL 搭建好 UEFI 环境后,会挂载
efisp分区并加载其中的 GBL - 正常情况下,XBL 应该用硬件里的 OEM 公钥验证 GBL 的签名
- 但在 8e5 近期的特定固件分支中,这一步校验被跳过了
- 这意味着我们可以把一个自己编写的未签名 EFI 应用刷入 efisp,XBL 照样会执行它
利用这个特性,我们编写一个简单的 UEFI 应用,通过高通的 QCOM_VERIFIEDBOOT_PROTOCOL 直接读取并修改 RPMB 中存储的 Bootloader 锁定状态,从而实现解锁。
完整的攻击链涉及四个阶段:
| 阶段 | 操作 | 突破的防御 |
|---|---|---|
| 1. 内核命令行注入 | 通过 Fastboot OEM 命令注入 androidboot.selinux=permissive | 参数解析器缺乏空格过滤 |
| 2. 混淆代理人攻击 | 利用 MQSAS 服务的测试接口写入 efisp 分区 | DAC + SELinux(已降级) |
| 3. 信任链劫持 | XBL 加载未签名的 EFI 应用,覆写 lock state | UEFI 签名校验缺失 |
| 4. 状态转移 | 设备检测到 BL 状态变化,触发数据擦除 | 标准安全机制(非漏洞) |
更详细的技术原理分析可以参考这篇文章:基于高通骁龙8 Elite Gen5架构的小米设备 Bootloader 解锁漏洞及底层技术原理剖析
实操部分
注意:小米 6.12.23 内核使用了 Rust 工具链,导致部分特性与 NebuSec 官方实现不符。利用完成后能够点亮、解锁并进入桌面,但新启动的 Android App 无法完成 Framework 初始化造成闪退,重启后 App 启动恢复正常——这是预期行为,不用担心。
以下步骤仅供参考,具体请以实际设备情况为准。
前置条件
- 搭载高通骁龙 8 Elite Gen5 的小米设备(小米 17 全系、K90 Pro Max 等)
- 已登录小米账号并开启”OEM 解锁”选项(开发者选项中)
- 电脑已安装 ADB 和 Fastboot 工具
- 已获取适配小米设备的 IonStack 漏洞利用编译产物(preload.so、su)
关于魔改 efisp
我使用的不是原始的 PoC efisp,而是经过魔改的版本,加入了以下新特性:
| 特性 | 说明 |
|---|---|
| 内存伪装 BL 锁定 | 系统/内核层面识别 BL 为完全锁定状态 |
| 去除黄橙白字警告 | 开机不再显示解锁警告 |
| 去除 OEM 开关限制 | 不需要登录小米账号、不需要等待期 |
| 降低等待时间 | 从 10 秒降至 2 秒 |
| SuperFastboot | 支持 fastboot fetch 命令提取分区、移除分区擦写保护 |
步骤概要
WARNING以下步骤涉及刷写底层分区,操作不当可能导致设备变砖。请务必提前备份重要数据!
第一步:获取系统基本信息
连接设备,确认内核版本、当前槽位和解锁状态:
adb shell uname -vradb shell idadb shell getprop | grep suffixadb shell getprop | grep locked第二步:IonStack 提权
将编译好的漏洞利用产物推送到设备并执行:
adb push source/build/bin/preload.so /data/local/tmp/preload.soadb shell 'chmod 0644 /data/local/tmp/preload.so'adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/true'验证 root 是否获取成功:
adb shell '/data/local/tmp/su -c id'如果输出 uid=0(root) 则说明提权成功。
NOTE由于小米 6.12.23 内核使用 Rust 工具链,部分内存布局与官方 PoC 预设不同,利用过程中可能会有差异,属正常现象。
第三步:刷入旧版未修复 efisp 漏洞的 ABL
获取 root 后,先用 dd 命令覆盖当前 ABL 为旧版(保留 efisp 漏洞未修复的版本):
adb push MI17P_abl-efisp/ABL_with_superfastboot.efi /sdcard/abl.imgsu -c 'dd if=/data/media/0/abl.img of=/dev/block/by-name/abl_a(b)'NOTE槽位后缀(
abl_a/abl_b)请根据第一步获取的suffix属性确定。
第四步:写入魔改 efisp
adb push MI17P_abl-efisp/efisp_superfastboot.img /sdcard/efisp_superfastboot.imgsu -c 'dd if=/data/media/0/efisp_superfastboot.img of=/dev/block/by-name/efisp'第五步:重启并解锁
写入完成后重启设备:
adb reboot亮屏后等待1秒立即按住音量减键,进入 SuperFastboot 模式,然后执行:
fastboot flashing unlock设备会自动重启进入系统。
第六步:验证解锁状态
系统开机后,BL 状态在系统层面依旧显示为锁定(这是内存伪装的效果),但实际已经解开。可以通过 Fastboot 验证:
adb reboot bootloaderfastboot getvar unlocked如果输出 yes 则说明解锁成功。
后续操作
解锁完成后就是常规流程了——用 Alpha Magisk、KernelSU、ReSukiSU 等管理器修补 init_boot 获取永久 Root 权限,这里不再赘述。
关于伪回锁
这次方案的核心亮点是伪回锁——通过魔改 efisp 实现”系统认为 BL 锁定,实际已解锁”的状态。
优势
- 不清数据:不需要恢复出厂设置,所有数据保留
- 完美 TEE:可信执行环境正常工作,硬件级安全功能不受影响
- 不影响 Google 下发 keybox:Play Integrity / SafetyNet 正常通过
- 无需额外环境隐藏:不需要 Shamiko、Zygisk 之类的 BL 状态伪装模块
- 去除 OEM 解锁限制:不需要小米账号、不需要等待期
劣势
- 不能修改带校验的分区:修改任何受 vb 校验的分区都会导致无法开机(变砖风险)
- 官方熔断风险:新版本固件如果熔断旧版 ABL 分区,当前方案将失效(数据飞走了)
不需要伪回锁?
如果你不需要伪回锁在执行完
fastboot flashing unlock之后进系统再利用一次 IonStack 漏洞提权
adb shellsudd if=/dev/zero of=/dev/block/by-name/efisp擦除魔改的 efisp 之后双清数据
fastboot erase userdatafastboot erase cache写在最后
为了赶在7月13号结束前出文章,文章写的比较匆忙,要是有刺漏万分抱歉,欢迎评论指正
这次解锁漏洞的出现,某种程度上是对小米近年来不断收紧解锁政策(限制名额、绑定账号、延长等待期等)的一次”技术反弹”。不管你支持还是反对这种做法,从技术角度来看,这确实是一次精彩的攻防案例——从内核级的 futex UAF 到固件级的信任链劫持,跨越了多个安全边界。
当然,解锁 bootloader 也意味着你放弃了厂商的安全保障。刷入第三方固件、获取 Root 权限都会增大设备被恶意软件攻击的风险。做好取舍,量力而行。
免责声明
本文仅供技术研究和学习交流使用。文章中提到的漏洞利用方法涉及修改设备底层固件,操作不当可能导致:
- 设备变砖(无法正常开机)
- 数据永久丢失
- 失去厂商保修
- 设备安全性降低
任何人因阅读、参考本文内容而导致的设备损坏、数据丢失或其他任何直接或间接损失,均与本文作者无关。 请在充分了解风险的前提下自行决定是否操作,一切后果由操作者自行承担。
建议在操作前:
- 备份所有重要数据
- 确保设备电量充足(50% 以上)
- 仔细阅读每一步操作说明
- 不确定的地方先搜索或提问,不要盲目执行
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时