2026 年 5 月 13 日,Google Project Zero 安全研究员 Seth Jenkins 发布了针对 Google Pixel 10 的完整零点击漏洞链研究报告。该研究展示了攻击者如何在无需用户任何交互的情况下,仅通过两个漏洞就能从远程直接获取 Android 设备的 root 权限。
这是继今年早些时候针对 Pixel 9 的类似漏洞链之后,Project Zero 团队在移动安全领域的又一重要发现。
相关阅读:Android Pixel 9 的零点击漏洞利用链全解析:从发送杜比音频解码到内核提权
主要内容:
-
他们把之前用于 Pixel 9 的 Dolby 零点击漏洞(CVE-2025-54957)稍作修改后,成功适配到 Pixel 10。
-
Pixel 9 使用的 BigWave 驱动已被移除,但他们在 Tensor G5 芯片的 VPU 视频解码驱动 (/dev/vpu)中发现了一个极其简单的新漏洞。
-
这个 VPU 漏洞允许任意 App 通过有缺陷的 mmap 函数,把整个内核内存 映射到用户空间,实现对内核代码和数据的完整读写。
-
整个利用过程代码非常少,开发完整 root 漏洞只需不到一天时间。
Google 这次修复速度较快(71 天),严重程度评为 High,但文章指出 Android 驱动中仍不断出现明显且严重的代码质量问题。
目前仅影响未安装 2025 年 12 月及之后安全补丁的 Pixel 10 设备。
第一环:更新后的 Dolby 解码器漏洞
研究团队首先将之前用于 Pixel 9 的 Dolby 解码器漏洞 CVE-2025-54957 移植到了 Pixel 10 设备上。这个漏洞存在于 Android 系统的 Dolby Universal Decoder 组件中,影响所有运行未打补丁系统的 Android 设备,直到 2026 年 1 月才被官方修复。
移植过程相对简单,主要工作是将针对 Pixel 9 计算的库文件偏移量更新为 Pixel 10 对应版本的偏移量。
唯一的挑战来自 Pixel 10 引入的新安全机制。
Pixel 10 使用 RET PAC 替代了传统的栈保护机制 fstack-protector,这意味着攻击者无法再通过覆盖__stack_chk_fail 函数来执行任意代码。
经过多次尝试,研究人员找到了一个替代方案。
他们选择覆盖 dap_cpdp_init 函数,这是解码器初始化时调用一次且之后不再使用的初始化代码。
覆盖该函数不会影响解码器的正常功能,同时能够实现代码执行。更新后的 Dolby UDC 漏洞利用代码已经公开,仅适用于 2025 年 12 月及更早安全补丁级别的未打补丁设备。
第二环:BigWave 消失,VPU 登场
将 Pixel 9 漏洞链的本地提权部分移植到 Pixel 10 并不可行,因为 Pixel 10 不再搭载 BigWave 驱动。然而,研究人员在 mediacodec SELinux 上下文中发现了一个新的设备节点 /dev/vpu。
这个驱动用于与 Tensor G5 芯片上的 Chips&Media Wave677DV 视频解码加速器进行交互。
根据开源代码中的注释,这个 VPU 驱动与之前的 BigWave 驱动由同一组开发人员编写和维护。
Project Zero 团队与 Jann Horn 合作,仅用了两个小时审计这个 VPU 驱动,就发现了一个极其严重的漏洞。
与上游 Linux 内核中用于较旧 Chips&Media 芯片 WAVE521C 的驱动不同,Pixel 的 WAVE677DV 驱动没有集成到 Video for Linux API 即 V4L2 中。
相反,它直接将芯片的硬件接口暴露给用户空间,包括允许用户空间映射芯片的 MMIO 寄存器接口。该驱动的主要功能是建立设备内存映射、进行电源管理以及允许用户空间等待芯片的中断信号。
这个 VPU 驱动中的漏洞异常简单且极易利用。问题出在驱动的 mmap 处理函数中。
cs
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;}
该函数的设计目的是将 VPU 硬件的 MMIO 寄存器区域映射到用户空间的虚拟地址空间。这个寄存器区域位于特定的物理内存地址范围内。然而,函数在调用 remap_pfn_range 时,完全基于用户提供的 VMA 大小进行映射,而没有对映射范围进行任何边界检查。
这意味着攻击者可以在调用 mmap 系统调用时指定一个大于寄存器区域的大小,从而从 VPU 寄存器区域的物理地址开始,映射任意数量的物理内存到用户空间。由于整个内核镜像包括代码段和数据段都位于比 VPU 寄存器区域更高的物理地址上,攻击者可以直接访问和修改内核的所有内容。
更致命的是,Pixel 设备的内核始终位于固定的物理地址上。
因此,VPU 内存区域与内核之间的偏移量是一个已知的常量。攻击者甚至不需要扫描映射的物理内存来寻找内核,只需根据 mmap 返回的地址加上固定偏移量,就能直接定位到内核的任意位置。
利用这个漏洞实现内核的任意读写仅需要 5 行代码,编写完整的漏洞利用程序花费了不到一天的时间。
VPU 漏洞的处理过程展示了 Android 漏洞分类和修复流程的明显进步,严重漏洞的快速修复将有效保护大量 Android 用户的安全。
但与此同时,这个案例也凸显了 Android 驱动安全仍然存在巨大的改进空间。当研究人员报告 BigWave 驱动中的漏洞时,他们曾希望开发人员能够主动检查其他驱动中是否存在类似的明显安全问题。然而五个月后,他们在同一团队开发的 VPU 驱动中发现了一个同样严重且极其浅显的漏洞。即使是最粗略的代码审计也能立即发现这个问题。
相关资料:
https://projectzero.google/2026/05/pixel-10-exploit.html
VPU驱动的mmap 支持OOB物理映射相关
https://project-zero.issues.chromium.org/issues/463438263
BigWave: Race between BIGO_IOCX_PROCESS timeout and bigo_worker_thread leads to UAF
https://project-zero.issues.chromium.org/issues/426567975
Dolby Unified Decoder: Out of bounds write in evolution parsing
https://project-zero.issues.chromium.org/issues/428075495#attachment76717436