2020-10 android kenel vulnerability

qualcomm: https://www.qualcomm.com/company/product-security/bulletins/october-2020-security-bulletin
google: https://source.android.com/security/bulletin/2020-10-01

0x00 CVE-2020-11125

发生位置

mhi_main.c的mhi_process_data_event_ring()函数

补丁

https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=146e6bb29827f0d3d1fb05ed980400bb53af13c2

https://source.codeaurora.org/quic/la/kernel/msm-4.14/commit/?id=5e62fe09e56dd7dca54335ca8d4eb2be5c62cc37

触发方法:

对mhi_tre结构体中的dword[1]进行伪造,大于mhi_cntrl的max_chan时就会出现越界读取。

漏洞成因

由MHI_TRE_GET_EV_CHID可知,chan的范围为0~255,但是max_chan是由驱动控制的最大支持通道数量,一般小于255,所以当MHI_TRE_GET_EV_CHID拿到的chan大于max_chan时会出现越界访问。

修复方法

第一个链接增加了chan和max_chan的判断,第二个则避免了chan和max_chan的判断导致的while死循环。

时间

2018-06-05至2020-03-31

是什么:

调制解调器驱动接口(MHI)

0x01 CVE-2020-11162

发生位置

mhi_main.c的parse_rsc_event()函数

补丁

https://source.codeaurora.org/quic/la/kernel/msm-4.14/commit/?id=d37bbae685207dbc67f31bc7f4ad0c6a7545abcf

触发方法:

使用恶意的MHI 设备,发送EOT事件,同时设置其对应的event结构体的dword[0]字段为0xffff,会导致mhi_result的bytes_xferd被设置为0xffff,导致了多个函数出现越界读写操作(例如qcom_mhi_ipc_router_dl_callback等,主要是根据驱动的不同)。

漏洞成因

没有对EOT事件时event结构体中的dword[0]字段进行限制,从而导致控制该字段会导致越界读写。

修复方法

从buf_info->len和evnet的dword[0]中选择小的字段来进行判断。

时间

2018-12-11至2020-05-18

是什么:

调制解调器驱动接口(MHI)

0x02 CVE-2020-11173

发生位置

adsprpc.c的fastrpc_internal_munmap(),fastrpc_internal_munmap_fd()和fastrpc_internal_mmap()

补丁

https://source.codeaurora.org/quic/la/kernel/msm-4.14/commit/?id=99d604642ea81f1596bb3734d82896da19f29ede

触发方法:

尝试用两个线程分别调用fastrpc_internal_mmap()和fastrpc_internal_munmap_fd(),如果fastrpc_internal_mmap过了fastrpc_mmap_create()的互斥变量保护之后,fastrpc_internal_munmap_fd将map释放掉,就会造成UAF。

漏洞成因

fastrpc_internal_munmap_fd()函数用的互斥变量和其他两个函数的不同,导致fastrpc_internal_mmap()只有fastrpc_mmap_create()函数被调用时有互斥变量保护,过了这个保护之后可以被race condition。

修复方法

为fastrpc_internal_munmap_fd()增加internal_map_mutex作为另一个互斥变量。

时间

2017-11-22至2020-05-19

是什么:

FastRPC驱动,主要用于cpu数据迁移到DSP

0x03 CVE-2020-11174

发生位置

adsprpc.c的多个函数。

补丁

https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=cd83646c66cdfecb5168a5585498fdcab8e65944

触发方法:

以fastrpc_mmap_create为例,伪造fastrpc_file 的cid字段大于8即可造成数组溢出,会造成一个非法的地址被认定为struct fastrpc_channel_ctx结构体,导致接下来对该结构体的访问出错。

漏洞成因

没有对cid进行边界检查,导致fastrpc_file 的cid字段可以造成数组向下溢出,多个函数受到影响。

修复方法

在所有用到fastrpc_file的cid字段的位置增加对cid的范围控制。

时间

2016-12-16至2020-04-30

是什么:

DSP服务

0x04 CVE-2020-3693

发生位置

qseecom.c的__qseecom_update_cmd_buf_64()函数

补丁

https://source.codeaurora.org/quic/la/kernel/msm-4.14/commit/?id=563b5263fa9615575afcb07b0ff3e8b2b2897494

触发方法:

当req的cmd_req_len 大于 sizeof(uint32_t)小于sizeof(uint_64_t)时就可以绕过检测,ifd_data[i].cmd_buf_offset的大小在cmd_req_len - sizeof(uint64_t)和cmd_req_len - sizeof(uint32_t)之间可以绕过第二个检测,同时这会导致偏移过大。

漏洞成因

在使用64位的app使用的地址是64位的地址,但是使用__boundary_checks_offset时,计算偏移的时候使用的是uint32_t,会导致偏移计算的地址过小,判断不准确。

修复方法

新增判断函数__boundary_checks_offset_64(),把原先的uint32_t修改为uint64_t,同时修改原先判断函数。

时间

2017-04-11至2019-08-19

是什么:

QSEECOM接口漏洞

0x05 CVE-2020-3694

发生位置

qseecom.c的__qseecom_update_qteec_req_buf()函数

补丁

https://source.codeaurora.org/quic/la/kernel/msm-4.14/commit/?id=3f960fc89a7d4d91a6c89c085582d2f00331640e

触发方法:

当req->req_len大于sizeof(uint32_t),(req->ifd_data[i].cmd_buf_offset小于req->req_len - sizeof(uint32_t)但是大于req->req_len - sizeof(struct qseecom_param_memref)。

漏洞成因

由下方对update指针进行设置时使用了sizeof(struct qseecom_param_memref),如果上面判断是sizeof(uint32_t)会导致覆盖不完整个qseecom_param_memref结构体。

修复方法

修改sizeof(uint32_t)为 sizeof(struct qseecom_param_memref)

时间

2017-04-11至2019-07-31

是什么:

QSEECOM接口漏洞

0x06 CVE-2020-3696

发生位置

ipc_router_security.c的msm_ipc_config_sec_rules()函数

补丁

https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit?id=8e1cdd1062c76fb8a5198d6f26e7cd067b4d98dc

触发方法:

尝试使用msm_ipc_add_default_rule增加一个新的default rule,两个线程同时调用msm_ipc_config_sec_rules()和msm_ipc_check_send_permissions()时,如果msm_ipc_check_send_permissions先取到rule,msm_ipc_config_sec_rules再释放可能会出现UAF。

漏洞成因

对service_id == ALL_SERVICE的rule进行了释放。

修复方法

删除service_id == ALL_SERVICE的rule释放代码,并且判断为该id直接返回失败。

时间

2016-11-11至2020-02-26

是什么:

高通ipc通信相关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值