qualcomm:https://www.qualcomm.com/company/product-security/bulletins/september-2020-bulletin
google:https://source.android.com/security/bulletin/2020-09-01
ps:莫名的这个月开源代码补丁特别少
0x00 CVE-2020-11124
发生位置:
diagchar_core.c的diag_remove_client_entry函数
补丁:
https://source.codeaurora.org/quic/la/kernel/msm-4.14/commit/?id=20205d9cd7980b2ae61696de971d729566c5f7cd
触发方法:
漏洞简介说的是在client超过限制的最大值时会再分配client_map,不怎么清楚这个,但是从补丁的位置可以判断,如果尝试两次diag_remove_client_entry同一个file,那么可以在判断pid的值成功之后,利用race condition可以在kfree(diagpriv_data)之前提前释放diagpriv_data,造成UAF。
漏洞成因:
在进行pid判断时没有对当前driver->client_map增加互斥锁,导致可能被篡改。
修复方法:
增加互斥锁
时间:
2016-12-05至2020-02-26
是什么:
字符驱动接口。用来根据配置文件查询android usb gadget
0x01 CVE-2020-3656
发生位置:
mhi_main.c的mhi_process_cmd_completion()函数
补丁:
https://source.codeaurora.org/quic/la/kernel/msm-4.14/commit/?id=e98a048a50f022181e008c60fea0c9cdee83e05a
触发方法:
貌似无法控制当前的命令通道标识,但是当前命令通道标识大于控制器最大支持的标识数,会造成越界访问,同时由于是mhi_chan,所以会出现特定位置的越界写。
漏洞成因:
没有对读取命令的通道标识符进行范围的判断。
修复方法:
增加对chan 的范围判断。
时间:
2018至2020-01-30
是什么:
Modem Host Interface在命令处理时的函数
0x02 CVE-2020-3674
发生位置:
adsprpc.c的fastrpc_device_ioctl()函数
补丁:
https://source.codeaurora.org/quic/la/kernel/msm-4.14/commit/?id=ef44a87dc872a945d31eb9199895e460646ac946
触发方法:
尝试对fastrpc进行ioctl调用FASTRPC_IOCTL_GETPERF,这里会将fperf最后的struct hlist_node结构体也暴露给用户空间。
漏洞成因:
在copy_to_user时长度过长,导致内核地址泄露。
修复方法:
修改源长度减小struct hlist_node,确保在结构体最后的struct hlist_node不会被泄露。
时间:
2017-08-17至2019-12-09
是什么:
数字信号处理服务
0x03 CVE-2020-0402
发生位置:
fs文件夹下的多个文件
补丁:
https://android.googlesource.com/kernel/common/+/dcf23ac3e846ca0cf626c155a0e3fcbbcf4fae8a%5E%21/#F0
触发方法:
创建一个文件写锁,用线程a来解锁当前的文件写锁,同时线程b又尝试增加一个新的文件锁到当前这个文件上。如果线程b先增加了文件锁,然后a线程进入抢占b线程,把当前等待的新文件锁fl_blocker 置为null,此时b线程继续执行到locks_delete_block会发现fl_blocker 被置为null,所以直接退出报错,所以新的文件锁被释放,最后a执行完了释放文件写锁,企图唤醒在等待的新的文件锁,触发了UAF。
漏洞成因:
该漏洞说修复上一次修复的不足。为了修复上诉的race condition漏洞,删除了对于waiter->fl_blocker等于null的判断。
修复方法:
将对fl_blocker字段的判断改为直接显示的对fl_blocked_member链表为空进行判断。
时间:
2018-11-30 至2020-03-18
是什么:
linux kernel中的文件锁操作相关,fcntl()
0x04 CVE-2020-0402
发生位置:
fs文件夹下的多个文件
补丁:
https://android.googlesource.com/kernel/common/+/dcf23ac3e846ca0cf626c155a0e3fcbbcf4fae8a%5E%21/#F0
触发方法:
两次触发list_add就好了,比较合适的函数是uvc_scan_chain,直接在内部就进行了三次list_add,但是uvc_scan_chain函数貌似只在uvc_probe()中被调用到,也就是只在函数注册时作为一个回调函数被调用,调用不可控。
漏洞成因:
没有对uvc_entity 中的chain的新增节点做存在性判断,会导致同一个节点在uvc_entity 的chain中存在两次,即会有指针指向自己。
修复方法:
增加对新增节点的前后指针的判断,如果不为空则直接视为是当前节点已经入列。
时间:
2009-07-01至2019-11-08
是什么:
uinput驱动