Pixel 10 0-Click 漏洞利用:驱动程序安全教训
Pixel 10 0-Click 漏洞利用:驱动程序安全教训
Google Project Zero 最近详细介绍了一个针对 Pixel 10 的 0-click 漏洞利用链,展示了多个漏洞的组合如何导致 Android 系统的完全 root 权限。这项研究强调了移动安全领域的一个反复出现的主题:虽然核心 OS 的保护措施正在加强,但第三方硬件驱动程序提供的攻击面仍然是一个重大的弱点。
漏洞利用链:从 0-Click 到 Root
为了构建此链,研究人员更新了一个先前已知的 Dolby 解码器漏洞 (CVE-2025-54957)。虽然原始漏洞针对的是 Pixel 9,但研究人员发现该漏洞在 2026 年 1 月发布补丁之前一直存在于各个 Android 版本中。
为 Pixel 10 更新漏洞利用程序需要调整偏移量并克服一项新的安全措施:引入了 RET PAC (Pointer Authentication Code) 来取代 -fstack-protector。为了绕过这一点,研究人员瞄准了 dap_cpdp_init,这是一个初始化函数,由于它在解码器初始化期间仅被调用一次,因此可以在不导致系统崩溃的情况下被覆盖。
内核漏洞的“圣杯”
在建立初始入口点后,研究人员将重点转向了本地权限提升。在 Pixel 9 上,他们使用了 BigWave 驱动程序;然而,在 Tensor G5 芯片上的 Chips&Media Wave677DV 硅片使用了不同的驱动程序。
在审计 /dev/vpu 处的 VPU (Video Processing Unit) 驱动程序时,团队发现 vpu_mmap 处理程序中存在一个关键缺陷。该驱动程序旨在将 VPU 硬件的 MMIO 寄存器区域映射到用户态虚拟地址空间。然而,该处理程序未能对内存映射请求的大小进行任何边界检查。
static int vpu_mmap(struct file *fp, struct vm_area_struct *vm)
{
unsigned long pfn;
struct vpu_core *core =
container_of(fp->f_inode->i_cdev, struct vpu_core, cdev);
vm_flags_set(vm, VM_IO | VM_DONTEXPAND | VM_DONTDUMP);
/* This is a CSRs mapping, use pgprot_device */
vm->vm_page_prot = pgprot_device(vm->vm_page_prot);
pfn = core->paddr >> PAGE_SHIFT;
return remap_pfn_range(vm, vm->vm_start, pfn, vm->vm_end-vm->vm_start, vm->vm_page_prot) ? -EAGAIN : 0;
}
通过指定一个大于寄存器区域的大小,攻击者可以将任意物理内存映射到用户态。由于 Pixel 设备上的 Android 内核位于固定的物理地址,研究人员能够映射内核镜像本身——包括 .text 和 .data 区域——并覆盖内核函数以实现任意代码执行。
正如 Project Zero 团队所指出的,实现内核的任意读写仅需要五行代码和不到一天的努力即可完成漏洞利用。
分类与修复
这项研究的一个积极收获是 Google 的响应时间有所改进。VPU 漏洞被评为“高”严重程度,并在报告后 71 天内得到了修复。这比之前 BigWave 驱动程序中类似的漏洞(最初被评为“中等”严重程度)的周转时间明显更快。
系统性安全挑战
尽管补丁发布速度加快,但研究强调了一个系统性问题:硬件驱动程序中“浅层”漏洞的持续存在。研究人员对类似的关键漏洞在同一组开发者的驱动程序中再次被发现表示了沮丧,尽管之前已经发出了警告。
Hacker News 上的社区讨论也呼应了这些担忧,一些用户指出 Pixel 设备上其他方缺乏内核随机化 (KASLR) 会使这些漏洞利用变得更加容易执行。
"GrapheneOS 在 Google 甚至无法实现 Android 内核位置随机化的同一硬件上实现了高安全级别,这太令人着迷了。"
其他贡献者指出,AI 驱动的功能所带来的攻击面增加的危险。许多现代手机现在会自动解码媒体,以便在用户甚至还没打开消息时,AI 就能“理解”消息,这在本质上增加了 0-click 攻击的风险。
结论
Pixel 10 漏洞利用链是一个提醒,移动设备的安全性不仅仅关乎 OS,还关乎整个驱动程序和第三方硅片的生态系统。虽然分类流程正在改进,但为了确保长期、安全的 Android 生态系统,需要采取主动、具备安全意识的驱动程序开发方法——以及要求将驱动程序并入 Linux 主线内核,这仍然是至关重要的。