近期,高通MSM平台KGSL(Kernel Graphics Support Layer)GPU驱动中被发现一个高危漏洞,编号CVE-2026-21385。分析表明,该漏洞可能自2025年12月起就已在野外被利用,属于典型的0day攻击。
该漏洞的利用链核心,在于用户态可控的对齐参数在驱动内部的内存分配计算中,引发了整数溢出与符号扩展问题。这为攻击者提升系统权限打开了通道。
攻击者首先在用户态构造恶意应用,通过KGSL驱动提供的ioctl接口(例如IOCTL_KGSL_GPU_COMMAND或相关的内存映射命令),反复向内核提交精心构造的大数值对齐参数。关键在于,这些参数在驱动内部被当作有符号整数进行处理。当对齐值接近或超过INT_MAX的一半时,后续的右移或加法运算会触发符号位扩展,导致计算出的内存偏移量或最终分配大小出现严重偏差,其结果可能变为一个极小的负值或巨大的正值。
随后,攻击者会结合多次调用来稳定触发溢出点:他们通常会先用正常的参数建立GPU上下文和缓冲区映射,然后再注入带有问题对齐值的命令缓冲区或共享内存请求。此时,kgsl_mem_entry_alloc或类似的函数在计算对齐后的size时会发生回绕(wraparound),造成实际分配的内核内存区域远小于预期,或者将内存偏移计算到相邻对象之外,从而产生一个可控的越界写入机会。
为了完成权限提升,攻击者通常会精心设计payload,将溢出获得的写原语瞄准内核中的关键数据结构,例如cred结构体、task_struct中的权限字段,或是相邻的kgsl进程私有数据。通过多次小范围内的内存破坏,逐步覆盖目标字段,最终将当前进程的uid/gid提升至0(即root权限),实现从普通应用到系统权限的跨越。整个利用链条高度依赖于对齐值与内核堆布局的精确匹配,因此在野利用往往针对特定的Android设备型号与内核版本进行定制。
官方发布的补丁从根本上解决了这一问题,方法是将对齐参数及相关计算变量全部改为无符号的u32类型,并加强了边界校验,从而有效阻断了符号扩展的路径和整数溢出的可能性。


文章参考:
https://zerodayengineering.com/insights/qualcomm-msm-arm-mali-0days.html
对于从事安全/渗透/逆向研究的开发者而言,深入理解此类底层驱动的漏洞模式,对于构建更稳固的移动安全防御体系至关重要。更多前沿技术分析和深度讨论,欢迎在云栈社区与同行交流。
|