其他
联发科芯片任意读写漏洞影响20余款手机、百万安卓设备
文章来源:seebug
一、漏洞背景
2020年3月,谷歌修补了一个存在于联发科芯片中的安全漏洞(CVE-2020-0069),漏洞影响20余款联发科芯片和数百万Android设备。该漏洞存在于MediaTek Command Queue驱动(CMDQ命令队列驱动),允许本地攻击者实现对物理内存地址的任意读写,从而导致权限提升。二、受影响国产手机型号
Huawei GR3 TAG-L21 Huawei Y5II Huawei Y6II MT6735 series Lenovo A5 Lenovo C2 series Lenovo Tab E7 Lenovo Tab E8 Lenovo Tab2 A10-70F Meizu M5c Meizu M6 Meizu Pro 7 Plus Oppo A59 series Oppo A5s Oppo A7x -- up to Android 8.x Oppo F5 series/A73 -- up to A.39 Oppo F7 series -- Android 8.x only Oppo F9 series -- Android 8.x only Oppo R9xm series Xiaomi Redmi 6/6A series ZTE Blade A530 ZTE Blade D6/V6 ZTE Quest 5 Z3351S
三、CMDQ驱动简析
DMA(直接内存访问)是允许专用硬件直接从主存储器(RAM)发送或接收数据的一种特性。其目的是通过允许大内存访问而不过多占用CPU来加速系统。MediaTek Command Queue驱动(CMDQ命令队列驱动)允许从用户层与DMA控制器通信,以实现媒体或显示相关的任务。基于Redmi 6/6A 源代码分析,在cmdq_driver.h头文件中,声明cmdq驱动的IOCTL调用如下:CMDQ_IOCTL_ALLOC_WRITE_ADDRESS指令为分配一个DMA缓冲区 CMDQ_IOCTL_FREE_WRITE_ADDRESS指令为释放一个DMA缓冲区 CMDQ_IOCTL_READ_WRITE_ADDRESS指令为读取一个DMA缓冲区中的数据 CMDQ_IOCTL_EXEC_COMMAND指令运行发送其他命令
1、分配过程
通过CMDQ_IOCTL_ALLOC_WRITE_ADDRESS调用cmdqCoreAllocWriteAddress ()函数,分配一个DMA缓冲区,该函数关键代码实现如下:2、执行命令过程
在CMDQ_IOCTL_EXEC_COMMAND调用中,采用cmdqCommandStruct结构体作为参数,结构体定义如下:四、读写命令分析
以cmdq_test.c测试代码为例,分析理解一个完整的读写命令构造。cmdq驱动中定义了两类寄存器,一类是地址寄存器用于存放地址,一类是数值寄存器用于存放读取或写入的数值。五、PoC分析与测试
(1)PoC代码中,执行写操作的关键代码如下:六、参考链接
https://github.com/MiCode/Xiaomi_Kernel_OpenSource/tree/cactus-p-oss/drivers/misc/mediatek/cmdq https://github.com/quarkslab/CVE-2020-0069_poc/blob/master/jni/kernel_rw.c https://blog.quarkslab.com/cve-2020-0069-autopsy-of-the-most-stable-mediatek-rootkit.html https://forum.xda-developers.com/android/development/amazing-temp-root-mediatek-armv8-t3922213 https://source.android.com/security/bulletin/2020-03-01
推荐阅读
*一个简单的VBScript即可绕过Windows 10的UAC
*PAN-OS披露重大漏洞,黑客能够绕过其防火墙和公司VPN产品