Pixel 10 的零点击漏洞利用链

2026-05-15 1 阅读 happyhardcore
我们最近发布了 Google Pixel 9 的漏洞利用链,证明只需两次漏洞利用即可从零点击上下文进入 Android root 权限。杜比 0-click 漏洞存在于整个 Android 系统中,直到 2026 年 1 月得到修补。虽然我们有 Pixel 9 的漏洞利用链,但我们想看看是否可以为 Pixel 10 编写类似的漏洞利用链。更新杜比漏洞利用 改变 CVE-2025-54957 的利用漏洞相当简单。大多数所需的更改涉及将针对 Pixel 9 的特定版本库计算的偏移量更新为 Pixel 10 库中的类似偏移量。唯一的挑战(除了希望我们更好地记录哪些同步帧包含偏移量之外)是 Pixel 10 使用 RET PAC 代替 -fstack-protector ,这意味着 __stack_chk_fail 无法被代码覆盖。经过一番尝试和错误后,我们使用了 dap_cpdp_init ,它是可以被覆盖而不会导致功能问题的初始化代码,因为它在解码器初始化时被调用一次,再也不会被调用。更新的杜比 UDC 漏洞可在此处获取。此漏洞仅适用于未修补的设备(SPL 2025 年 12 月或更早版本)。删除 BigWave,添加 VPU 将链的本地权限升级链接移植到 Pixel 10 并不可行,因为该设备上未附带 BigWave 驱动程序。但是,在 /dev/vpu 的媒体编解码器 SELinux 上下文中可以看到新的驱动程序。该驱动程序用于与 Tensor G5 芯片上的 Chips&Media Wave677DV 芯片进行交互,旨在加速视频解码。根据开源 C 文件中的注释,该驱动程序由构建 BigWave 驱动程序的同一组开发人员开发和维护。我们与 Jann Horn 合作,花了 2 个小时审核了这个 VPU 驱动程序,发现了一个特殊漏洞。与 WAVE521C(这是一种较旧的 Chips&Media 芯片)的上游 Linux 驱动程序不同,WAVE677DV 的 Pixel 驱动程序不与 V4L2(“Video for Linux API”)集成;相反,它直接将芯片的硬件接口暴露给用户空间,包括让用户空间映射芯片的MMIO寄存器接口。驱动程序主要建立设备内存映射,进行电源管理,并允许用户空间等待来自芯片的中断。内核漏洞的圣杯 这个 bug 特别引起了我们的注意,因为它非常容易被利用: 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 ); /* 这是一个 CSR 映射,使用 pgprot_device */ vm -> vm_page_prot = pgprot_device ( vm -> vm_page_prot ); pfn = 核心 -> paddr >> PAGE_SHIFT ;返回 remap_pfn_range ( vm , vm -> vm_start , pfn , vm -> vm_end - vm -> vm_start , vm -> vm_page_prot ) ? - 再次获得:0;该 mmap 处理程序旨在用于将 VPU 硬件的 MMIO 寄存器区域映射到用户态虚拟地址空间(包含在特定物理内存地址范围内的区域)。在此过程中,它纯粹根据 VMA 的大小来调用 remap_pfn_range,而根本不受此寄存器区域的大小限制。这意味着,通过在 mmap 系统调用中指定大于寄存器区域的大小,调用者可以从 VPU 寄存器区域的物理地址开始,将所需数量的物理内存映射到用户区。整个内核映像(包括 .text 和 .data 区域)位于比 VPU 寄存器区域更高的物理地址,因此可以通过此错误由用户空间访问和修改。此时,人们可以简单地覆盖任何内核函数来获得内核代码执行——或者实际上任何原始人可能想要的。由于内核始终位于 Pixel 上的相同物理地址,因此 VPU 内存区域和内核之间的偏移始终是已知值,因此这一点变得更加容易。因此,甚至不需要在映射的物理内存中扫描内核 - 您只需确切地知道它相对于 mmap 返回的地址的位置,假设您使 VMA 长度足够大。利用此漏洞实现对内核的任意读写需要 5 行代码,并且为此问题编写完整的利用程序只需要不到一天的时间。补丁流程 我于 2025 年 11 月 24 日报告了此错误,Android VRP 将该问题评为高严重性。这是一项改进,因为我们在 Pixel 9 上用于提权的 BigWave 漏洞(具有相同的安全影响)最初被评为“中等”严重性。这代表了关于如何分类和修补这些类型的错误的态度的有意义和积极的变化。该漏洞在 2 月份的 Pixel 上首次报告后 71 天就得到了修补