CVE-2019-14040/14041:高通芯片漏洞影响安卓设备 | Sunbet
登录
  • 欢迎进入Sunbet!
  • 如果您觉得Sunbet对你有帮助,那么赶紧使用Ctrl+D 收藏Sunbet并分享出去吧
  • 您好,这里是Sunbet!

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

Sunbet_新闻事件 Sunbet 29次浏览 已收录

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

8个月前,Zimperium (zLabs)安全研究人员向高通报告了2个kernel漏洞,影响含有高通芯片集的安卓设备。漏洞CVE编号为CVE-2019-14040和CVE-2019-14041,攻击者利用这些漏洞和CVE-2017-13253、 CVE-2018-9411、CVE-2018-9539漏洞组合起来可以让恶意app实现完成root权限。提权后,app可以:

· 读取设备上存储的所有隐私数据,比如照片、视频、文本消息、邮件附件等。

· 获取设备上其他app的登陆凭证。

· 在用户不知情的情况下通过摄像头和麦克风录制视频或音频。

漏洞分析

漏洞存在于QSEECOM(QTI Secure Execution Environment Communicator,QTI安全执行环境通信器)驱动文件中。该驱动文件允许正常用户空间简称与安全环境(Secure World)TrustZone进行通信。驱动暴露的API包含对/dev/qseecom的调用。而正常情况下只有一小部分有特权的安卓服务集才可以访问/dev/qseecom。

CVE-2019-14041

该漏洞是有个竞争条件漏洞,可以造成内存破坏。该竞争条件来源于函数——__qseecom_update_cmd_buf。该函数的目标是更新要发送给TrustZone缓存,其中含有TrustZone可以理解的指针。

为了避免代码复制,该函数的目的是处理缓存需要被修改的2种不同情况。因此,该函数可以从两个完全不同的ioctls来访问。根据ioctl被调用的位置不同,该函数有时候的行为也是不同的。为此,该函数要检查data->type:

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

从上面的代码中可以看出,第一种情况data->type 是QSEECOM_CLIENT_APP。在其他情况下,data->type 是QSEECOM_LISTENER_SERVICE。

但该数据其实是一个指向qseecom_dev_handle struct的指针。如何在__qseecom_update_cmd_buf运行时修改data->type呢?

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

运行ioctl QSEECOM_IOCTL_APP_LOADED_QUERY_REQ就会ui马上修改data->type。即使有一些机制来限制ioctls的并行运行。但只有在data->type修改后才生效。同时运行ioctl会造成__qseecom_update_cmd_buf产生竞争条件。

该函数是从一个匹配QSEECOM_LISTENER_SERVICE的data->type开始的,然后继续匹配QSEECOM_CLIENT_APP的data->type。

这就会引发不同类型的内存破坏,具体要根据当时的竞争条件来判断。虽然大多数竞争条件是Null Dereference(空指针异常)这样无害的,但是有些竞争条件会引发缓冲区移除这样危险的漏洞利用行为。

CVE-2019-14040

CVE-2019-14040是一个kernel内存映射UAF漏洞。

为了让正常的用户空间进程与TrustZone通信,使用了ION机制。ION机制允许用户空间进程与正常内存不同的行为异常的特殊堆内存。然后,用户空间进程可以与自己的内存空间进行映射,进行读写等操作。

ION与QSEECOM的工作原理是打开/dev/qseecom文件会引用分配的ION缓存。然后,kernel就知道如何缓存与TrustZone进行下一步通信了。虽然主要是用于用户空间进程从ION缓存中进行读写,但kernel有时候可以自己通过__qseecom_update_cmd_buf来修改。

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

上面的代码是处理一个来自用户空间引用分配的ION缓存的请求。从上面可以看出,与ION缓存相关的多个参数都保存了,比如handle和kernel空间的映射。

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

QSEECOM中的缓存使用

当释放ION缓存后,kernel会将其设置为NULL。

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

ION缓存释放后的QSEECOM数据

NULL会在尝试从kernel使用ION缓存时被使用。Handle也会进行验证是否为空。

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

下面是从打开/dev/qseecom文件引用ION缓存的代码:

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

很明显,代码不允许在没有检查的情况下从用户空间请求。函数中有多个检查来完整验证来自用户空间的请求。比如,如果请求的长度小于ION缓存的长度,那么请求就是无效的。

漏洞就存在这个检查中。如果请求中的长度太长了会怎么样呢?如果打开引用ION缓存的/dev/qseecom 文件还没有被释放会怎么样?

CVE-2019-14040/14041:高通芯片漏洞影响安卓设备

ION缓存被释放后,接收长度太长的请求后的QSEECOM数据

在该场景中,handle不在为NULL,但是其余参数也不会被修改,所以会指向之前引用的ION缓存。比如,sb_virt指向的是已经释放的映射内存。当尝试从kernel使用引用的ION缓存时,handle不再为空,就会引发UAF漏洞。

总结

攻击者利用这些漏洞可以实现设备的root和kernel权限提升。理论上讲,攻击者利用这些漏洞加上之前发现的漏洞来实现完全root权限。

PoC

完整PoC代码参见GitHub:

https://github.com/tamirzb/CVE-2019-14040

https://github.com/tamirzb/CVE-2019-14041

本文翻译自:https://blog.zimperium.com/multiple-kernel-vulnerabilities-affecting-all-qualcomm-devices/:

Pwn2Own Tokyo:TP-Link Archer A7命令注入漏洞分析

本文介绍在2019年11月的Pwn2Own Tokyo比赛中发现并使用的命令注入漏洞。 该漏洞存在于tdpServer守护进程(/usr/bin/tdpServer)中,该守护进程在TP-Link Archer A7(AC1750)路由器上运行,硬件版本为5,MIPS体系结构,固件版本190726。此漏洞只能由路由器LAN端的攻击者利用 ,但是不需要身份验证。利用此漏洞后,攻击者能够以root用户身份执行任何命令,包括从另一台主机下载并执行二进制文件,漏洞已分配编号CVE-2020-10882,TP-Link在固件版本A7(US)_V5_200220上做了补丁修复。  https://www.tp-link.com/us/support/download/archer-a7/ 本文中的所有函数偏移量和/usr/bin/tdpServer代码段均来自固件版本190726。 0x01  tdpServer 在tdpServer上0.0.0.0 UDP端口20002的守护进程在做监听,目前尚未完


Sunbet|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明CVE-2019-14040/14041:高通芯片漏洞影响安卓设备
喜欢 (0)
[]
分享 (0)