Android kernel vulnerability between November 2020 and April 2021

0x00 CVE-2020-11131

发生位置

CORE/SERVICES/WMA/wma.c的wma_apfind_set_cmd函数

补丁

https://source.codeaurora.org/quic/le/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=b5549a556a9ce60b514ea20dc62f9499a97857a2

触发方法:

使用netlink sock套接字向qcacld发送type类型为WDA_APFIND_SET_CMD的消息,同时设置信息的bodyptr的字段超过0xffff大小,来触发越界拷贝。

漏洞成因

使用了u_int16_t来存储request_data_len,所以alloc申请时,一定小于0xffff,所以再执行vos_mem_copy时出现可能出现越界拷贝。

修复方法

修改长度相关的定义,把u_int16_t转换为size_t。

时间

2014-11-25至2019-10-11

是什么:

wlan模块,驱动qcacld-2.0

0x01 CVE-2020-11125

发生位置

wlan_cmn_ieee80211.h的wlan_parse_rsn_ie()函数

补丁

https://source.codeaurora.org/quic/qsdk/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn/commit/?id=fe1e85068c57d8c4e4557ed6b265ac6b9694c3a1

触发方法:

伪造wlan_rsn_ie 结构体的pkmid_count字段大于4

漏洞成因

没有对rsn的pmkid_count最大值进行限制,会导致qdf_mem_copy()出现越界拷贝。导致rsn的mkpid二维数组字段出现越界拷贝。

修复方法

增加对rsn的pmkid_count字段的限制。

时间

2018-01-16至2020-07-10

是什么:

CNSS WLAN主机驱动

0x02 CVE-2020-11146

发生位置

qcedev.c的qcedev_ioctl()函数

补丁

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

触发方法:

直接使用ioctl cmd为QCEDEV_IOCTL_MAP_BUF_REQ,设置arg参数为qcedev_map_buf_req 结构体并且让其中的num_fds字段大于16。

漏洞成因

没有对map_buf的num_fds字段进行限制,会导致接下来fd,fd_offset,fd_size的数组出现越界访问。

修复方法

在使用num_fds字段前增加对该字段的大小验证。

时间

2018-05-15至2020-04-01

是什么:

qcedev驱动(qce),用于用户态访问加密硬件

0x03 CVE-2020-11167(非内核层)

发生位置

packet_fragmenter.c的reassemble_and_dispatch()函数

补丁

https://source.codeaurora.org/quic/le/platform/system/bt/commit/?id=cfdb42d512704965acd551b9ffb6de37aac51bf7

https://source.codeaurora.org/quic/la/platform/system/bt/commit/?id=a741d8d2f59b2a090694be71cd538c821cf95ce5

触发方法:

构造满足2*packet->len - 4大于l2cap_length + 8和l2cap_length + 8 - packet->len小于4的L2CAP的数据包。

修复方法

在计算第二部分packet重构的长度时,增加HCI_ACL_PREAMBLE_SIZE的长度4。

时间

2015-03-16至2020-04-03

是什么:

蓝牙模块

0x04 CVE-2020-11185(非内核层)

发生位置

wlan_vdev_mgr_tgt_if_rx_api.c的tgt_vdev_mgr_get_response_timer_info()函数

补丁

https://source.codeaurora.org/quic/qsdk/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn/commit/?id=227ff6c08ac997241a5a0513ad25f89072096d02

触发方法:

构造vdev_id大于WLAN_UMAC_PSOC_MAX_VDEVS。

漏洞成因

没有对vdev_id进行验证,导致psoc_mlme_obj结构体中的psoc_vdev_rt数组可能出现数组越界访问。

修复方法

增加对vdev_id的验证。

时间

2019-02-05至2020-04-21

是什么:

wlan通信模块

0x05 CVE-2020-11217

发生位置

q6afe.c的多个位置

补丁

https://source.codeaurora.org/quic/la/platform/vendor/opensource/audio-kernel/commit/?id=b8630beb74fab51dbb5b7c769fecfa9534d12b4a

触发方法:

sp_make_afe_callback()创建完合适的指针之后,afe_get_spv4_th_vi_v_vali_data(),afe_get_spv4_th_vi_ftm_data(),afe_get_spv4_ex_vi_ftm_data(),afe_get_sp_v4_rx_tmax_xmax_logging_data()中的一个可能利用race condition来抢占释放指针,这会导致另一个函数使用时出现,UAF甚至double free的风险。

漏洞成因

sp_make_afe_callback中申请了spv4_get_param_resp_ptr指针指向spv4_rcvd_param_size大小的空间,之后afe_get_spv4_th_vi_v_vali_data(),afe_get_spv4_th_vi_ftm_data(),afe_get_spv4_ex_vi_ftm_data(),afe_get_sp_v4_rx_tmax_xmax_logging_data()都使用了该指针,同时在函数的最后会释放该指针,这会导致UAF。

修复方法

重构了整个逻辑结构。

时间

NON至2020-08-05

是什么:

高通声卡驱动qdsp6v2

0x06 CVE-2020-11149

发生位置

cam_context_utils.c的多个函数

补丁

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

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

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

https://source.codeaurora.org/quic/la/platform/vendor/opensource/camera-kernel/commit/?id=7f7032a632ca9610f76229adfed65f7c3e2a5525

触发方法:

sync_obj大于CAM_SYNC_MAX_OBJS,或者通过记录已经释放的对象的id和非法的对象的id,来访问不合法的对象。

漏洞成因

没有验证同步id的合法性,直接使用cam_sync_register_callback和cam_context_putref来使用同步id,会导致非法同步对象访问。

修复方法

增加了cam_sync_check_valid来验证id的合法性。

时间

未知,多个版本时间不同步

是什么:

高通相机驱动

0x07 CVE-2020-11150

发生位置

cam_ife_hw_mgr.c的cam_ife_mgr_check_and_update_fe

补丁

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

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

https://source.codeaurora.org/quic/la/platform/vendor/opensource/camera-kernel/commit/?id=ebf9a16afa94444f28277f4c981e1c7482fb46e2

触发方法:

伪造cam_isp_acquire_hw_info结构体中的input_info_offset大于input_info_size或者data+input_info_offset+cam_isp_in_port_info结构体大小大于acquire_info_size。

漏洞成因

没有对来自UMD的数据(struct cam_isp_acquire_hw_info)大小进行验证,直接使用,可能会导致越界访问。

修复方法

增加了对上诉的范围进行验证,同时新增当前acquire_info_size来表明输入的硬件信息的大小。

时间

2018-12-03至2020-5-5

是什么:

高通的相机驱动(读取UMD的部分)

0x08 CVE-2020-11151

发生位置

msm_cvp.c的msm_cvp_register_buffer()

补丁

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

https://source.codeaurora.org/quic/la/platform/vendor/opensource/video-driver/commit/?id=e543a787241afd850a6509e814a936d84ccd4b74

触发方法:

msm_cvp_unregister_buffer()和msm_cvp_register_buffer()针对cbuf->list对象进行race condition,可能会造成UAF甚至double free。

漏洞成因

msm_cvp_register_buffer()函数在list_add_tail()和list_del()中间,可能会由于race condition导致cbuf->list被释放,从而造成UAF。

修复方法

不在msm_cvp_register_buffer中释放cbuf->list对象,仅仅在该函数执行必定成功时,利用list_add_tail(),避免因为时间出现race condition。

时间

2018-02-24至 2020-04-21

是什么:

高通的媒体驱动。

0x09 CVE-2020-11125

发生位置

wlan_cmn_ieee80211.h的wlan_parse_rsn_ie()函数

补丁

https://source.codeaurora.org/quic/qsdk/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn/commit/?id=fe1e85068c57d8c4e4557ed6b265ac6b9694c3a1

触发方法:

伪造wlan_rsn_ie 结构体的pkmid_count字段大于4

漏洞成因

没有对rsn的pmkid_count最大值进行限制,会导致qdf_mem_copy()出现越界拷贝。导致rsn的mkpid二维数组字段出现越界拷贝。

修复方法

增加对rsn的pmkid_count字段的限制。

时间

2018-01-16至2020-07-10

是什么:

CNSS WLAN主机驱动

0x0A CVE-2020-11146

发生位置

qcedev.c的qcedev_ioctl()函数

补丁

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

触发方法:

直接使用ioctl cmd为QCEDEV_IOCTL_MAP_BUF_REQ,设置arg参数为qcedev_map_buf_req 结构体并且让其中的num_fds字段大于16。

漏洞成因

没有对map_buf的num_fds字段进行限制,会导致接下来fd,fd_offset,fd_size的数组出现越界访问。

修复方法

在使用num_fds字段前增加对该字段的大小验证。

时间

2018-05-15至2020-04-01

是什么:

qcedev驱动(qce),用于用户态访问加密硬件

0x0B CVE-2020-11167(非内核层)

发生位置

packet_fragmenter.c的reassemble_and_dispatch()函数

补丁

https://source.codeaurora.org/quic/le/platform/system/bt/commit/?id=cfdb42d512704965acd551b9ffb6de37aac51bf7

https://source.codeaurora.org/quic/la/platform/system/bt/commit/?id=a741d8d2f59b2a090694be71cd538c821cf95ce5

触发方法:

构造满足2*packet->len - 4大于l2cap_length + 8和l2cap_length + 8 - packet->len小于4的L2CAP的数据包。

修复方法

在计算第二部分packet重构的长度时,增加HCI_ACL_PREAMBLE_SIZE的长度4。

时间

2015-03-16至2020-04-03

是什么:

蓝牙模块

0x0C CVE-2020-11185(非内核层)

发生位置

wlan_vdev_mgr_tgt_if_rx_api.c的tgt_vdev_mgr_get_response_timer_info()函数

补丁

https://source.codeaurora.org/quic/qsdk/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn/commit/?id=227ff6c08ac997241a5a0513ad25f89072096d02

触发方法:

构造vdev_id大于WLAN_UMAC_PSOC_MAX_VDEVS。

漏洞成因

没有对vdev_id进行验证,导致psoc_mlme_obj结构体中的psoc_vdev_rt数组可能出现数组越界访问。

修复方法

增加对vdev_id的验证。

时间

2019-02-05至2020-04-21

是什么:

wlan通信模块

0x0D CVE-2020-11217

发生位置

q6afe.c的多个位置

补丁

https://source.codeaurora.org/quic/la/platform/vendor/opensource/audio-kernel/commit/?id=b8630beb74fab51dbb5b7c769fecfa9534d12b4a

触发方法:

sp_make_afe_callback()创建完合适的指针之后,afe_get_spv4_th_vi_v_vali_data(),afe_get_spv4_th_vi_ftm_data(),afe_get_spv4_ex_vi_ftm_data(),afe_get_sp_v4_rx_tmax_xmax_logging_data()中的一个可能利用race condition来抢占释放指针,这会导致另一个函数使用时出现,UAF甚至double free的风险。

漏洞成因

sp_make_afe_callback中申请了spv4_get_param_resp_ptr指针指向spv4_rcvd_param_size大小的空间,之后afe_get_spv4_th_vi_v_vali_data(),afe_get_spv4_th_vi_ftm_data(),afe_get_spv4_ex_vi_ftm_data(),afe_get_sp_v4_rx_tmax_xmax_logging_data()都使用了该指针,同时在函数的最后会释放该指针,这会导致UAF。

修复方法

重构了整个逻辑结构。

时间

NON至2020-08-05

是什么:

高通声卡驱动qdsp6v2

0x0E CVE-2020-11149

发生位置

cam_context_utils.c的多个函数

补丁

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

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

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

https://source.codeaurora.org/quic/la/platform/vendor/opensource/camera-kernel/commit/?id=7f7032a632ca9610f76229adfed65f7c3e2a5525

触发方法:

sync_obj大于CAM_SYNC_MAX_OBJS,或者通过记录已经释放的对象的id和非法的对象的id,来访问不合法的对象。

漏洞成因

没有验证同步id的合法性,直接使用cam_sync_register_callback和cam_context_putref来使用同步id,会导致非法同步对象访问。

修复方法

增加了cam_sync_check_valid来验证id的合法性。

时间

未知,多个版本时间不同步

是什么:

高通相机驱动

0x0F CVE-2020-11150

发生位置

cam_ife_hw_mgr.c的cam_ife_mgr_check_and_update_fe

补丁

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

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

https://source.codeaurora.org/quic/la/platform/vendor/opensource/camera-kernel/commit/?id=ebf9a16afa94444f28277f4c981e1c7482fb46e2

触发方法:

伪造cam_isp_acquire_hw_info结构体中的input_info_offset大于input_info_size或者data+input_info_offset+cam_isp_in_port_info结构体大小大于acquire_info_size。

漏洞成因

没有对来自UMD的数据(struct cam_isp_acquire_hw_info)大小进行验证,直接使用,可能会导致越界访问。

修复方法

增加了对上诉的范围进行验证,同时新增当前acquire_info_size来表明输入的硬件信息的大小。

时间

2018-12-03至2020-5-5

是什么:

高通的相机驱动(读取UMD的部分)

0x10 CVE-2020-11151

发生位置

msm_cvp.c的msm_cvp_register_buffer()

补丁

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

https://source.codeaurora.org/quic/la/platform/vendor/opensource/video-driver/commit/?id=e543a787241afd850a6509e814a936d84ccd4b74

触发方法:

msm_cvp_unregister_buffer()和msm_cvp_register_buffer()针对cbuf->list对象进行race condition,可能会造成UAF甚至double free。

漏洞成因

msm_cvp_register_buffer()函数在list_add_tail()和list_del()中间,可能会由于race condition导致cbuf->list被释放,从而造成UAF。

修复方法

不在msm_cvp_register_buffer中释放cbuf->list对象,仅仅在该函数执行必定成功时,利用list_add_tail(),避免因为时间出现race condition。

时间

2018-02-24至 2020-04-21

是什么:

高通的媒体驱动。

0x11 CVE-2017-18509

发生位置

ip6mr.c的ip6_mroute_setsockopt和ip6_mroute_getsockopt

补丁

https://github.com/torvalds/linux/commit/99253eb750fda6a644d5188fb26c43bad8d5a745

触发方法:

传入任意sock类型不为SOCK_RAW和协议不为IPPROTO_ICMPV6的,都可以获取到。

漏洞成因

当一个sock的类型不为SOCK_RAW且协议不是IPPROTO_ICMPV6,该sock同样会被取到ip6mr_table基于raw6_sock的结构体偏移位置的值,同时被当成ip6mr_table进一步使用。

修复方法

在提取ip6mr_table之前就提前判断sock的类型和协议。

时间

2009年10月1日至2017年2月27日

是什么:

ipv6的sock包处理

0x12 CVE-2020-11272

发生位置

lim_api.c下的lim_is_pkt_candidate_for_drop函数

补丁

https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=6bb1315d69b705cfef5b1c9e211f20e7fc5a4938

触发方法:

lim_is_pkt_candidate_for_drop在调用sta_ds 的时候,dph_lookup_hash_entry 函数之前,使用pe_delete_session利用race condition删除sta_ds 结构体,在接下来last_assoc_received_time 和last_disassoc_deauth_received_time的访问就会触发UAF

漏洞成因

在访问sta_ds 的时候没有加锁,导致条件竞争会出现UAF

修复方法

及那个last_disassoc_deauth_received_time和last_assoc_received_time 放入了另一个结构体处理。

时间

未知

是什么:

高通qcacld-3.0设备,貌似不在内核代码中?

0x13 CVE-2020-11271

发生位置

msm-pcm-routing-v2.c下的msm_routing_get_lsm_app_type_cfg_control函数

补丁

https://source.codeaurora.org/quic/qsdk/platform/vendor/opensource/audio-kernel/commit/?id=80ac1b29f1ea6be32eddb33bdf3d72407b315f38

触发方法:

msm_routing_get_rms_value_control可能可以和msm_routing_put_lsm_app_type_cfg_control进行竞争,需要修改ucontrol->value.integer.value[0]大于MAX_APP_TYPES

漏洞成因

msm_routing_get_lsm_app_type_cfg_control和msm_routing_put_lsm_app_type_cfg_control在处理没有加锁,导致ucontrol->value.integer.value[0] 可能在通过校验后被篡改为其他的值,导致越界拷贝。

修复方法

在上述两个函数处加上routing_lock锁。

时间

未知至2020-02-20

是什么:

声卡相关

0x14 CVE-2020-11282

发生位置

kgsl.c的kgsl_mmap_memstore

补丁

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

触发方法:

未知。。。

漏洞成因

没有取消掉vma数据结构的VM_MAYWRITE字段,导致GPU内存被mmap到用户空间时可写

修复方法

去掉VM_MAYWRITE字段

时间

未知至2020-08-26

是什么:

高通GPU驱动

0x15 CVE-2020-11286

发生位置

ep0.c下的dwc3_ep0_handle_status

补丁

https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=79856f1b189faf189f8cf43e7222fc0b5138563e

触发方法:

调用dwc3_ep0_handle_status时,使recip=USB_RECIP_INTERFACE,在dwc3_ep0_delegate_req中会调用一次dwc3_gadget_ep0_queue,尝试构造使ret=0,然后触发再一次触发__dwc3_gadget_ep0_queue,会导致同一个对象两次被放入list。

漏洞成因

recip=USB_RECIP_INTERFACE时dwc3_ep0_handle_status调用dwc3_ep0_delegate_req返回ret=0时,不会直接结束函数,会执行__dwc3_gadget_ep0_queue。

修复方法

取消对ret的判断,直接返回ret

时间

2011-08-22至2020-09-30

是什么:

usb驱动

0x16 CVE-2020-11297

发生位置

lim_api.c的lim_is_pkt_candidate_for_drop

补丁

https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=2a10c7aa8cdd3277e35176207c44ade90a567e73

触发方法:

逻辑错误,无需手动触发

漏洞成因

SIR_MAC_MGMT_ASSOC_REQ、SIR_MAC_MGMT_DISASSOC和SIR_MAC_MGMT_DEAUTH不可能被subType 同时满足,接下来的代码永远是无效的。

修复方法

把上诉关系从与改成或,并且优化了lim_process_disassoc_frame和lim_process_deauth_frame函数,促使cds_flush_logs在函数最后执行。

时间

2015-11-17至2020-01-07

是什么:

高通wlan驱动qcacld-3.0

0x17 CVE-2021-0399

发生位置

xt_qtaguid.c的qtaguid_untag函数

补丁

https://android-review.googlesource.com/c/kernel/common/+/1549134/

触发方法:

在不打开/dev/xt_qtaguid的情况下,将sock_tag_entry放入pqd_entry->sock_tag_list中,然后调用qtaguid_untag函数,可以使list中出现一个指向已经释放对象的指针,再次访问这个对象,会造成UAF

漏洞成因

IS_ERR_OR_NULL(pqd_entry)执行成功但是sock_tag_entry->list.next仍然存在的情况下,不会从pqd_entry->sock_tag_list表删除sock_tag_entry,在sock_tag_entry被释放之后,会导致悬空指针。

修复方法

将IS_ERR_OR_NULL(pqd_entry)和sock_tag_entry->list.next不存在的从或关系,改为并列的顺序关系。

时间

2017-04-19至2021-1-13

是什么:

xt_qtaguid驱动,一个网络数据包过滤器?

0x18 CVE-2020-11290

发生位置

qseecom_lk.c的qseecom_read_from_nand

补丁

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

触发方法:

msm_ioctl_register_event和msm_ioctl_deregister_event进行race condition

漏洞成因

对第一个client对象注册进行操作的时候,无论client是否注册成功,都先将client放入list中,在函数结束的位置,如果注册失败,再删除client,这导致中间的空窗期,其他函数可以通过list访问client,是经典race condition导致的UAF漏洞。

修复方法

将client放入list的操作放到最后。

时间

未知至2020-09-14

是什么:

显示器驱动

0x19 CVE-2020-11305

发生位置

qseecom_lk.c的qseecom_read_from_nand

补丁

https://source.codeaurora.org/quic/le/kernel/lk/commit/?id=7cffd6bb4fc616935b5ca1d452be5d1c87ba86f1

触发方法:

未知?bootload中的。。。

漏洞成因

校验不正确导致ptn->length * flash_num_pages_per_blk()可以出现页框数出现整数溢出

修复方法

修改判断语句为(UINT_MAX - page_size + 1)/ page_size,多减去了一页

时间

未知到2020-09-26

是什么:

bootload加载qseecom驱动

0x1A CVE-2020-11308

发生位置

PartitionTableUpdate.h的MAX_GPT_NAME_SIZE

补丁

https://source.codeaurora.org/quic/le/abl/tianocore/edk2/commit/?id=c468f18421e113057ba72b83edf985c53fe4705d

触发方法:

传入ASCII码转Unicore码后会超过32个字符的字符串。bootload的漏洞,不会。。。

漏洞成因

ASCII字符串转Unicore时,由于ptn_name 是36,会导致期整数溢出。

修复方法

把ptn_name最大值扩大到72

时间

2015-10-3至2020-10-26

是什么:

bootload

0x1B CVE-2020-11309

发生位置

kgsl.c的memdesc_sg_virt函数

补丁

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

触发方法:

利用IOCTL_KGSL_MAP_USER_MEM 将同一块useraddr映射两次,会导致get_user_pages将页框的引用计数加两次,这里可能会导致useraddr即使被释放了,由于引用计数导致不会被置换出内存,另一方面。sg_alloc_table_from_pages将会创建两个sg_table为同一块内存空间。这导致,有两个memdesc->sgt会指向同一个空间,释放其中一个,再使用,就会导致UAF。

漏洞成因

没有做好import同一块的内存空间两次的校验工作。

修复方法

重写了memdesc_sg_virt和check_vma逻辑,在check_vma中校验了是否为已经映射了的内存。

时间

未知至2020-10-21

是什么:

高通GPU驱动

0x1C CVE-2020-15436

发生位置

block_dev.c的blkdev_get函数

补丁

https://android.googlesource.com/kernel/common/+/49289b1fa5a67011%5E%21/#F0

触发方法:

调用blkdev_get并且让__blkdev_get函数失败,会触发UAF。

漏洞成因

blkdev_get会调用__blkdev_get,但是如果失败,bdev引用计数会被清0,导致bdev对象被释放,但是blkdev_get的后续还是会调用到该对象。

修复方法

__blkdev_get不处理bdev的引用计数,blkdev_get中进行处理。

时间

2010-11-13至2020-6-25

是什么:

linux内核块设备子系统

0x1D CVE-2020-25705

发生位置

icmp.c的icmp_global_allow

补丁

https://android.googlesource.com/kernel/common/+/d6c552505c0d1719dda42b4af2def0618bd7bf54%5E%21/#F1

触发方法:

未知,Keyu Man将会发布在学术期刊

漏洞成因

未知,Keyu Man将会发布在学术期刊

修复方法

随机化ICMP的速率限制

时间

2014-09-19至2020-10-29

是什么:

ICMP协议

0x1E CVE-2020-11234

发生位置

sockev_nlmcast.c的sockev_client_cb函数

补丁

https://source.codeaurora.org/quic/la/kernel/msm-4.19/commit/?id=76a699e746c9b3a1494597a6756ff21fc84b48e4

触发方法:

sockev_client_cb和sk_free争对struct sock进行race condition

漏洞成因

sockev_client_cb在操作sock对象时没有加锁

修复方法

sockev_client_cb中增加锁sock_hold和sock_put函数

时间

2019-03-1至2019-5-21

是什么:

sock相关

你可能感兴趣的:(android,kernel)