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

0x00 CVE-2020-0255

发生位置

hooks.c的selinux_netlink_send()函数

补丁

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

触发方法:

尝试构造多个netlink sock的数据包,发送给内核,填充struct sk_buff的data字段,当发送数据包多于一个时,触发netlink_send的hook函数,除了第一个数据包的nlmsghdr会被检测,其他的都可以绕过检测。

漏洞成因

只对sk_buf的data字段中第一个nlmsghdr进行了检测。

修复方法

通过sk_buf数据结构的len字段来循环检测,每次减去nlmsghdr的大小,知道检测完所有的nlmsghdr。

时间

2005-4-16至2020-4-30

是什么:

selinux中关于发送netlink sock的hook函数。

0x01 CVE-2020-12464(6.7)

发生位置

message.c的usb_sg_cancel()函数

补丁

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

触发方法:

尝试用两个线程分别触发usb_sg_wait()函数,同时确保先触发的线程有urbs存活,来引起usb_sg_cancel和usb_sg_wait的race condition.

漏洞成因

usb_sg_cancel中没有判断io的存活与否,直接对io进行了操作,导致io可能已经在另一个线程被usb_sg_wait给释放了。

修复方法

在usb_sg_cancel中增加对io->count的引用,确保io的存活,同时在usb_sg_cancel中增加对io->complete的操作。

时间

2008-1-30至2020-4-16

是什么:

发生linux USB 子系统的USB S-Glibrary

0x02 CVE-2019-16746(9.8)

发生位置

nl80211.c的validate_beacon_head()函数

补丁

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

触发方法:

NL80211是用netlink来交互的,所以应该需要构造一个netlink sock来触发驱动执行NL80211_CMD_START_AP指令。尝试在netlink sock中填充nlattr长度大于 u.beacon于ieee80211_mgmt的偏移大小,导致越界拷贝。

漏洞成因

没有对nlattr数据进行检测

修复方法

增加了validate_beacon_head来对nlattr进行检测。

时间

2007-12-19至2019-10-1

是什么:

NL80211驱动

0x03 CVE-2020-11116(9.8)

发生位置

wlan_hdd_assoc.c的hdd_send_ft_assoc_response()

补丁

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

触发方法:

主机向客户端发送修改文件后缀名的请求,伪造pCsrRoamInfo结构体的nAssocRspLength,pCsrRoamInfo->nAssocRspLength - FT_ASSOC_RSP_IES_OFFSET大于IW_GENERIC_IE_MAX,会导致申请的buff空间出现越界拷贝,或者pCsrRoamInfo->nAssocRspLength小于FT_ASSOC_RSP_IES_OFFSET也会出现问题。

漏洞成因

缺少对pCsrRoamInfo->nAssocRspLength长度的检查,只是简单的检查了是否为0。

修复方法

增加对pCsrRoamInfo->nAssocRspLength最大值和最小值的检测。

时间

2015-11-17至2019-12-30

是什么:

高通qcacld2.0和3.0驱动

0x04 CVE-2019-10527(7.8)

发生位置

smem.c的多个函数

补丁

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

触发方法:

尝试远程触发qcom_smem_alloc函数,只要绕过smem_private_entry 的canary 就可以申请超过当前分区的entry结构。

漏洞成因

没有对远程程序传来的参数进行足够的判断。

修复方法

主要是参数的范围进行了检测,确保不会出现越界的情况。

时间

2015-7-28至2019-7-8

是什么:

高通的IPC模块

0x05 CVE-2019-14117(7.8)

发生位置

rmnet_map_data.c的rmnet_free_agg_pages和__rmnet_alloc_agg_pages

补丁

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

触发方法:

rmnet_free_agg_pages()函数能够释放所有的list中的agg_page,但是并没有在list中清除,所以可以直接两次调用rmnet_free_agg_pages,来触发UAF。

漏洞成因

单单只是释放了agg_page对象,没有把list指向agg_page的指针置空,导致了UAF。

修复方法

在rmnet_free_agg_pages增加list_del来清除list中的元素。同时在alloc_agg_pages时,对list进行初始化。

时间

2013至2019-09-13

是什么:

高通的wlan通信模块相关,RmNet驱动

0x06 CVE-2020-11115(7.5)

发生位置

rrm_api.c的rrm_fill_beacon_ies()

补丁

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

触发方法:

设置(pBcnIes + 1)=0xfe或者更大的时候,当0xfe+2之后,pNumIes会出现整数溢出,导致(*pNumIes) + len) < pIesMaxSize)失效,所以无论如何qdf_mem_copy都会被执行。

漏洞成因

pNumIes被定义为uint8_t ,而len被设置为了uint16_t,将len赋值给pNumles时会出现整数溢出。

修复方法

增加len和BcnNumIes 的判断,用BcnNumIes 来限制len不会过大。

时间

2015-11-17至2019-12-28

是什么:

高通WLAN模块rrm(无线资源管理)

0x07 CVE-2020-11118(7.5)

发生位置

rrm_api.c的rrm_fill_beacon_ies()

补丁

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

触发方法:

正常调用rrm_fill_beacon_ies()函数即可。

漏洞成因

循环使用的BcnNumIes,每次循环都是BcnNumIes-len>0来作为循环的条件,但是由于最开始的两个字节是IE的头部,所以会导致循环次数增加一次。

修复方法

BcnNumIes-len>=2来作为循环的条件。

时间

2015-11-17至2020-03-05

是什么:

高通WLAN模块rrm(无线资源管理)

0x08 CVE-2020-11120(7.8)

发生位置

eap_proxy_qmi.c下的多个函数。

补丁

https://source.codeaurora.org/quic/la/platform/external/wpa_supplicant_8/commit?id=36a414abcf0c864460d8c3bf95a6fd070d9dbbd7

触发方法:

先创建相应的等待事件,在调用wpa_qmi_client_indication_cb()线程时会注册定时器延时执行__wpa_qmi_client_indication_cb,来释放callback data,在此之后,如果event loop执行到了等待事件,触发了callback函数,此时由于data被释放,所以基本为null。

漏洞成因

eap_proxy 中对直接对callback所需的data进行了操作。

修复方法

集中使用eap_proxy_clear_qmi_cb_data和eap_proxy_prepare_qmi_cb_data来对cb_data进行申请和释放。在eap_proxy_clear_qmi_cb_data和eap_proxy_prepare_qmi_cb_data中增加对cb_data为null的校验,并且用本地的data来单独进行处理eap_proxy 中对于data的操作,防止对callback中的data产生影响。

时间

2019-10-14至2019-11-14

是什么:

高通eap(可扩展的身份验证协议?)代理qmi(用于ap和bp端交互的一种机制)通信

0x09 CVE-2020-3646(7.8)

发生位置

dp_debug.c下的多个函数

补丁

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

触发方法:

使用dp的debugfs来进行命令操作,以dp_debug_read_dpcd为例,当输入的count小于len时会导致copy_to_user导致缓存区溢出。

漏洞成因

在进行copy_to_user时没有对长度进行检查。

修复方法

增加检查,使用len和count中较小的长度作为拷贝的长度。

时间

2017-08-18至2019-08-26

是什么:

图像显示(dp)的debugfs

0x0A CVE-2020-3647(7.8)

发生位置

npu_debugfs.c的npu_debug_off_read和npu_debug_log_read

补丁

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

触发方法:

用npu的debugfs来调用npu_debug_log_read或者npu_debug_off_read,以npu_debug_log_read为例,当remaining_to_end+debugfs->log_num_bytes_buffered大于count时,用户态的user_buf可能发生缓冲区溢出。

漏洞成因

在进行copy_to_user时没有对长度进行检查。

修复方法

npu_debug_log_read中对长度进行判断,选择debugfs->log_num_bytes_buffered,debugfs->log_buf_size - debugfs->log_read_index和count中最小的一个进行copy_to_user。npu_debug_off_read中增加对len和count的长度的判断。

时间

至 2019-12-14

是什么:

npu的debugfs

2020-8 android kernel vulnerability相关推荐

  1. 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 ...

  2. android 仿微信朋友圈 评论,2020年android 仿微信朋友圈 评论

    2020年android 仿微信朋友圈 评论 1.如果有人问我:那些艰难的岁月你是怎么熬过来的?我想我只有一句话回答:我有一种强大的精神力量支撑着我,这种力量名字叫"想死又不敢" ...

  3. Android Kernel Features

    2019独角兽企业重金招聘Python工程师标准>>> Android Kernel Features Jump to: navigation, search Contents 1 ...

  4. android 编译 oserror,编译android kernel时,关闭error, forbidden warning

    编译android kernel时,遇到error, forbidden warning sound/soc/codecs/es8323.c:1249:12: warning: 'entry_read ...

  5. 股市大跌对于IT行业的我们应该如何应对!2020年Android开发的未来发展方向该如何走?

    作者:Android架构 原文链接:https://zhuanlan.zhihu.com/p/64736562 最近这几天基金股市一片绿油油,心拔凉拔凉的.虽然我是一名Android开发者,但是更是一 ...

  6. 【SemiDrive源码分析】【X9芯片启动流程】30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一)

    [SemiDrive源码分析][X9芯片启动流程]30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一) 一.Android Kernel 启动流程分析 ...

  7. 2020年Android面试题三部曲——Java部分

    2020年Android面试题三部曲--Java部分 序 常问JAVA知识点 基本数据类型 abstract和interface的区别 重写和重载的区别 break.continue.return区别 ...

  8. Android kernel和标准Linux Kernel的差异

    在这里http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Porting-Android-to-a-new-device/发现一 ...

  9. 2020原生Android基础实用开发

    2020原生Android基础实用开发 1.环境配置 进入官网,下载Android studio安装包 https://developer.android.google.cn/studio/ 安装An ...

最新文章

  1. linux操作系统-设置静态ip
  2. 我所经历的京东618
  3. python开发需要掌握哪些知识-Python的10个基础知识点,新手必须背下来!
  4. BIOS INT 10中断功能
  5. oracle主备机密码文件不同步,oracle主备同步问题
  6. 也谈压缩感知(compressive sensing)
  7. 如何简单快速对@RequestParam声明的参数作校验
  8. 【iCore4 双核心板_ARM】例程十八:USBD_VCP实验——虚拟串口
  9. linux windows市场占有率,Windows 10市场份额罕见倒退:Win7也跌了 Linux暴增111%
  10. linux adb 安装包下载地址,adb.exe下载|adb.exe 64位32位 官方版-520下载站
  11. python下载安装教程(详细步骤+图示)
  12. win10系统word2016出现错误 “429 ActiveX部件不能创建对象”
  13. 从「广义斯托克斯公式」结合「外微分公式」导出「牛顿-莱布尼茨公式」、「格林公式」、「高斯公式」、「斯托克斯公式」
  14. python3爬虫实战-requests+beautifulsoup-爬取下载顶点网站的小说
  15. 防火墙 | DDos攻击防范技术
  16. 【Android】HAL层浅析
  17. 如何在微信读书上阅读极客时间专栏?
  18. 关于ROS功能包里package.xml和CMakeList.txt的源码分析
  19. T237012 体积
  20. 插件加载导致outlook崩溃

热门文章

  1. cocos creator 飞翔的小鸟
  2. python实现解数独
  3. 3.Mapper.xml 详解
  4. Arcgis空间分析——求取一组要素的地理中心
  5. html过渡效果例子,20.6.过渡效果transition
  6. windows 运行打开服务命令
  7. 无代码是什么?无代码好用吗?
  8. latex的图的排列方法_latex两幅图上下排列
  9. 强制清空浏览器缓存与无视管理员权限删除应用
  10. python画简单心型_python画心型图案