安全研究机构 Paradigm Shift 于昨日(6月18日)发布了一篇深度技术报告,披露了他们在一项针对苹果 A12 与 A13 芯片的研究中发现了一个严重的 BootROM 安全漏洞。该漏洞被命名为 usbliter8。顾名思义,这个名称就透露出它能够直接绕过整个安全启动链的强悍破坏力。

首先来看哪些苹果设备会受到这个 BootROM 漏洞的影响。该漏洞主要存在于采用 A12 和 A13 芯片的机型,具体涵盖了 iPhone XS 系列、iPhone XR、iPhone 11 系列,以及搭载 S4 和 S5 芯片的部分 iPad 与 Apple Watch 产品。完整的受影响的设备清单如下:
11-inch iPad Pro (第一代)
11-inch iPad Pro (第二代)
12.9-inch iPad Pro (第三代)
12.9-inch iPad Pro (第四代)
Apple Watch SE (第一代)
Apple Watch Series 4
Apple Watch Series 5
iPad (第 9 代)
iPad (第 8 代)
iPad Air (第 3 代)
iPad mini (第 5 代)
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPhone SE (第 2 代)
iPhone XR
iPhone XS
iPhone XS Max
这个漏洞的根源究竟在哪里?简单来说,它精准地瞄准了 A12 和 A13 芯片内部集成的 DWC2 USB 控制器。关键点在于:该控制器自身存在一个硬件层面的设计缺陷,再配合特定的固件配置漏洞,导致整个应用处理器的安全启动链可以被彻底攻破。下面我们来详细解析其运作机制。
该控制器在处理 USB Setup 数据包时,采用环形 DMA(直接内存访问)缓冲机制。每当它接收到一个 8 字节的 Setup 包,DMA 地址指针就会递增 8 个字节。但问题出现在第四次接收时:控制器会尝试将指针回退 24 个字节以实现环形复位。然而,控制器逻辑中存在一个隐蔽的缺陷——它同样能接收长度小于 8 字节的数据包(但存储时按 4 字节对齐)。这就导致指针每次实际写入的步进量(小于8)与固定的回退量(24 字节)产生不匹配。最终形成了一个步进为 12 字节的缓冲欠载原语,相当于在原本稳固的环形缓冲区上撕开了一个可以利用的口子。
在 A12 芯片上,这个 USB 控制器的 DMA 缓冲区被分配在堆内存中,紧邻着 USB 任务栈。攻击者正好可以利用这个“欠载”原语去覆盖栈上保存的 LR(链接寄存器)值。一旦调度器切换回 USB 任务,就能够直接劫持 PC(程序计数器)指针,实现任意代码执行。
到了 A13 芯片上,情况变得更加复杂,因为苹果引入了 PAC(指针认证)以及堆元数据校验等高级防护机制。要突破这些防御,攻击者需要分多个步骤,就像解一道复杂的几何证明题:
第一步,先覆盖与 DART(设备地址重映射表)相关的数据结构,并利用 DART 清理例程中的一个零写入原语,清空全局 DART 指针,从而避免触发堆校验崩溃。
然后,攻击者利用 MMIO 寄存器向其中一个值写入 0xF,覆盖全局的 panic 计数器。这样做的目的是:当后续系统 panic 时,它会进入一个无限循环而不会直接重启,为后续操作争取宝贵的时机。
再下一步,攻击者需要精确控制 DMA 写入的时机,在 USB 任务实际运行时,覆写其任务结构中的临界区深度字段,再触发一个带 IRQ 的 panic,让它进入这个“无限挂起”的循环状态。
最后,在这个无限循环期间继续执行 DMA 写操作,用于覆盖 BSS 段里的 USB IRQ 中断处理函数指针,最终获得完全的 PC 控制权。
一旦获得代码执行权限,攻击者会利用 SecureROM 中极少出现的 EL1 模式切换点(通过执行一条 SVC 0 指令)。在 A12 上,可以通过预先搭建好的 ROP 链,将 DMA 目标地址设为 boot trampoline 区域(该区域为只读可执行,但 DMA 可以写入),然后写入 shellcode,再跳转到 EL1 权限去执行。
尽管这个漏洞听起来相当骇人,但由于它是 BootROM 级别的硬件缺陷,无法通过任何软件更新来修复。不过,值得庆幸的是,它的利用条件非常苛刻:攻击者必须物理接触到设备,并且它不会直接威胁到安全隔区处理器。苹果官方已经收到了该漏洞的通报。对于普通用户来说,最务实的建议就是:如果你还在纠结是否要升级设备,不妨直接换一台采用 A14 或更新芯片的机型,这才是一劳永逸的终极解决方案。
附上参考地址
Introducing usbliter8
