安全研究人员发现了Arm的Mali GPU驱动程序中的一个关键漏洞,该漏洞允许恶意Android应用程序绕过内存标记扩展(MTE)保护并实现任意内核代码执行。
该漏洞名为CVE-2025-0072,对使用命令流前端(CSF)架构(包括Google的Pixel 7,8和9系列智能手机)配备更新Arm Mali GPU的设备构成重大威胁。
安全专家Man Yue Mo的研究于2024年12月12日向Arm报告了这个问题。
遵循负责任的披露做法,Arm解决了2025年5月2日公开发布的马里驱动程序版本r54p0中的漏洞,随后包含在Android的2025年5月安全更新中。
攻击向量涉及通过命令队列利用 Mali GPU 和 userland 应用程序之间的通信机制,特别是针对驱动程序中的 kbase_queue 对象实现。
GitHub分析师指出,这个漏洞遵循了MTE旁路技术的关注模式,基于Mo之前发表的关于CVE-2023-6241的类似研究。
此漏洞的影响超出了典型的内存损坏问题,因为它表明,基于硬件的安全功能(如MTE)可以通过精心制作的驱动程序级漏洞来规避。
Mo成功在启用了内核MTE的Pixel 8设备上开发并测试了该漏洞,表明该漏洞会影响现实世界的部署,其中MTE正在积极防止内存安全违规。
利用技术以创建无页后使用条件为中心,允许攻击者重用已释放的内存页面作为 GPU 上下文的页表全局目录 (PGD)。
这种方法可以操纵GPU内存管理结构,最终提供任意内核代码执行的途径。
漏洞的重要性不仅在于其损害设备安全性的能力,还在于其演示了现代硬件安全扩展可以通过复杂的驱动程序级攻击系统地绕过。
技术开发机制
CVE-2025-0072的核心在于操纵马里GPU驱动程序中的CSF队列绑定和不绑定进程。
该漏洞利用了 kbase_queue 对象在队列绑定操作期间管理内存分配的设计缺陷。
当使用 KBASE_IOCTL_CS_QUE_BIND ioctl 创建并绑定到 kbase_queue_group 时,驱动程序分配 GPU 内存页面并将其地址存储在 quael->phys 字段中。
关键缺陷在队列终止和重新绑定过程中出现。
当使用 KBASE_IOCTL_CS_QUE_QUE_GROUP_TERMINATE ioctl 终止 kbase_queue_group 时,清理过程调用 kbase_csf_term_descheduled_queue_group,它解绑定关联的队列并重置其 queange->group。
这种不绑定操作为相同的 kbase_queue 绑定到不同的 kbase_queue_group 创造了机会,触发了第二个内存分配,覆盖原始 queange->phys 地址。
利用序列涉及通过以下过程创建页面使用后无条件:首先,攻击者创建并将 kbase_queue 绑定到 kbase_queue_group,将 GPU 内存页面映射到用户空间。
void kbase_csf_free_command_stream_user_pages(struct kbase_context *kctx, struct kbase_queue *queue)
{
kernel_unmap_user_io_pages(kctx, queue);
kbase_mem_pool_free_pages(&kctx->mem_pools.small[KBASE_MEM_GROUP_CSF_IO],
KBASEP_NUM_CS_USER_IO_PAGES, queue->phys, true, false);
}
发表评论
您还未登录,请先登录。
登录