2343 字
6 分钟
713解锁节来辣!小米17全系,k90pm又能解bl了
2026-07-13

概述#

正式开始介绍之前先简单说一下本次利用到的漏洞吧

其一:IonStack#

CyberMeowfia 是安全研究团队 NebuSec 发布的内核漏洞利用 PoC 仓库,核心是 IonStack 漏洞利用链——一个无需解锁 bootloader 即可获取 Android 设备 root 权限的方案。

NebuSec
/
CyberMeowfia
Waiting for api.github.com...
00K
0K
0K
Waiting...

项目包含两个 CVE:CVE-2026-10702(浏览器入口)、CVE-2026-43499(内核提权)

我们本次用到的是 CVE-2026-43499(内核提权),利用 Linux 内核 futex PI(Priority Inheritance)机制的 stack-UAF(栈上释放后重用)漏洞。漏洞利用流程:

  1. 触发 UAF:通过 FUTEX_WAIT_REQUEUE_PI + FUTEX_CMP_REQUEUE_PI 的竞态条件,制造 futex 死锁,导致内核栈被释放后仍被引用
  2. 栈喷射控制:利用多种 syscall(prctlsetsockoptpselectprocess_vm_readvkeyctltimerfdfutex)将可控数据喷射到被释放的内核栈上
  3. pipe buffer 物理读写:通过伪造 pipe buffer 结构,获得对任意物理地址的读写能力(physrw)
  4. KASLR 绕过:通过泄露内核代码段地址,计算内核基址偏移
  5. 提权:修改进程 cred 结构体,将 uid/gid 设为 0,设置完整 capabilities
  6. SELinux 禁用:将 selinux_enforcing 写为 0,关闭 SELinux
  7. seccomp 绕过:清除 TIF_SECCOMP 标志和 no_new_privs,移除 seccomp 过滤器
  8. 安装 su 守护进程:部署持久化的 root shell 守护进程

受影响设备极广,涵盖了15年来几乎所有内核版本且成功率极高

其二:高通 8e5 efisp 签名缺失#

这个漏洞来自高通骁龙 8 Elite Gen5(以下简称 8e5)的启动架构变更。

高通在 8e5 平台上引入了 GBL(Google Bootloader)取代传统的 ABL。GBL 是一个标准的 UEFI 应用(.efi),存储在 efisp 分区中。理论上 XBL(eXtensible Bootloader)在加载 efisp 分区内的 EFI 文件时,应该对其进行严格的数字签名校验——但实际并没有

kasnria001
/
qualcomm_gbl_exploit_poc
Waiting for api.github.com...
00K
0K
0K
Waiting...

简单来说就是:

  1. XBL 搭建好 UEFI 环境后,会挂载 efisp 分区并加载其中的 GBL
  2. 正常情况下,XBL 应该用硬件里的 OEM 公钥验证 GBL 的签名
  3. 但在 8e5 近期的特定固件分支中,这一步校验被跳过了
  4. 这意味着我们可以把一个自己编写的未签名 EFI 应用刷入 efisp,XBL 照样会执行它

利用这个特性,我们编写一个简单的 UEFI 应用,通过高通的 QCOM_VERIFIEDBOOT_PROTOCOL 直接读取并修改 RPMB 中存储的 Bootloader 锁定状态,从而实现解锁。

完整的攻击链涉及四个阶段:

阶段操作突破的防御
1. 内核命令行注入通过 Fastboot OEM 命令注入 androidboot.selinux=permissive参数解析器缺乏空格过滤
2. 混淆代理人攻击利用 MQSAS 服务的测试接口写入 efisp 分区DAC + SELinux(已降级)
3. 信任链劫持XBL 加载未签名的 EFI 应用,覆写 lock stateUEFI 签名校验缺失
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)
x-spy
/
CVE-2026-43499-popsicle
Waiting for api.github.com...
00K
0K
0K
Waiting...

关于魔改 efisp#

我使用的不是原始的 PoC efisp,而是经过魔改的版本,加入了以下新特性:

特性说明
内存伪装 BL 锁定系统/内核层面识别 BL 为完全锁定状态
去除黄橙白字警告开机不再显示解锁警告
去除 OEM 开关限制不需要登录小米账号、不需要等待期
降低等待时间从 10 秒降至 2 秒
SuperFastboot支持 fastboot fetch 命令提取分区、移除分区擦写保护

步骤概要#

WARNING

以下步骤涉及刷写底层分区,操作不当可能导致设备变砖。请务必提前备份重要数据!

第一步:获取系统基本信息

连接设备,确认内核版本、当前槽位和解锁状态:

adb shell uname -vr
adb shell id
adb shell getprop | grep suffix
adb shell getprop | grep locked

第二步:IonStack 提权

将编译好的漏洞利用产物推送到设备并执行:

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'

验证 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.img
su -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.img
su -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 bootloader
fastboot getvar unlocked

如果输出 yes 则说明解锁成功。

后续操作#

解锁完成后就是常规流程了——用 Alpha MagiskKernelSUReSukiSU 等管理器修补 init_boot 获取永久 Root 权限,这里不再赘述。


关于伪回锁#

这次方案的核心亮点是伪回锁——通过魔改 efisp 实现”系统认为 BL 锁定,实际已解锁”的状态。

优势#

  • 不清数据:不需要恢复出厂设置,所有数据保留
  • 完美 TEE:可信执行环境正常工作,硬件级安全功能不受影响
  • 不影响 Google 下发 keybox:Play Integrity / SafetyNet 正常通过
  • 无需额外环境隐藏:不需要 Shamiko、Zygisk 之类的 BL 状态伪装模块
  • 去除 OEM 解锁限制:不需要小米账号、不需要等待期

劣势#

  • 不能修改带校验的分区:修改任何受 vb 校验的分区都会导致无法开机(变砖风险)
  • 官方熔断风险:新版本固件如果熔断旧版 ABL 分区,当前方案将失效(数据飞走了

不需要伪回锁?#

如果你不需要伪回锁在执行完

fastboot flashing unlock

之后进系统再利用一次 IonStack 漏洞提权

adb shell
su
dd if=/dev/zero of=/dev/block/by-name/efisp

擦除魔改的 efisp 之后双清数据

fastboot erase userdata
fastboot erase cache

写在最后#

为了赶在7月13号结束前出文章,文章写的比较匆忙,要是有刺漏万分抱歉,欢迎评论指正

这次解锁漏洞的出现,某种程度上是对小米近年来不断收紧解锁政策(限制名额、绑定账号、延长等待期等)的一次”技术反弹”。不管你支持还是反对这种做法,从技术角度来看,这确实是一次精彩的攻防案例——从内核级的 futex UAF 到固件级的信任链劫持,跨越了多个安全边界。

当然,解锁 bootloader 也意味着你放弃了厂商的安全保障。刷入第三方固件、获取 Root 权限都会增大设备被恶意软件攻击的风险。做好取舍,量力而行。


免责声明#

本文仅供技术研究和学习交流使用。文章中提到的漏洞利用方法涉及修改设备底层固件,操作不当可能导致:

  • 设备变砖(无法正常开机)
  • 数据永久丢失
  • 失去厂商保修
  • 设备安全性降低

任何人因阅读、参考本文内容而导致的设备损坏、数据丢失或其他任何直接或间接损失,均与本文作者无关。 请在充分了解风险的前提下自行决定是否操作,一切后果由操作者自行承担。

建议在操作前:

  1. 备份所有重要数据
  2. 确保设备电量充足(50% 以上)
  3. 仔细阅读每一步操作说明
  4. 不确定的地方先搜索或提问,不要盲目执行
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

713解锁节来辣!小米17全系,k90pm又能解bl了
https://blog.mcxiaochen.top/posts/mi-unlock-713/
作者
辰渊尘
发布于
2026-07-13
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录