【原创缝隙】Linux内核Marvell WI-FI芯片驱动缝隙(CVE-2019-3846/CVE-2019-10126)

颁布功夫 2019-06-10

缝隙概述



Marvell Avastar802.11ac低功耗无线芯片系列重要利用于笔记本电脑、智能手机、游戏设备、路由器和物联网设备等,如Surface Pro、Surface laptop、Samsung Chromebook、Galaxy J1、Sony PlayStation 4、Xbox One。


Linux内核Marvell Avastar系列芯片(88W8766/88W8797/88W8897/88W8997)驱动存在远程溢露马脚CVE-2019-3846和本地溢露马脚CVE-2019-10126,可导致回绝服务(系统崩溃)或肆意代码执行,宝运莱官方网站ADLab已第一功夫提交厂商进行建复。


缝隙影响领域



Linux kernel 3.2~Linux kernel 5.1


缝隙分析



信息元素(Information Element,IE)是IEEE 802.11治理帧的组成部门。AP和STA通过IE互换信路,速度以及加密算法等信息。除Vendor Specific表,其他IE均使用TLV数据结构暗示。


宝运莱·(中国区)最新官方网站


其中,Type字段长度为1个字节,常见的IE类型以及取值如下:

宝运莱·(中国区)最新官方网站


CVE-2019-3846远程堆溢露马脚


该缝隙位于drivers/net/wireless/marvell/mwifiex/scan.c中的mwifiex_update_bss_desc_with_ie函数中。补丁代码增长对WLAN_EID_SSID和WLAN_EID_SUPP_RATES的长度校验。


宝运莱·(中国区)最新官方网站


缝隙触发的函数挪用链:


->mwifiex_cfg80211_connect [mwifiex]
->mwifiex_cfg80211_assoc [mwifiex]
->mwifiex_bss_start [mwifiex]
->mwifiex_fill_new_bss_desc [mwifiex]

->mwifiex_update_bss_desc_with_ie [mwifiex]


能够看出,缝隙产生在Association阶段,无需经过四次握手认证。


宝运莱·(中国区)最新官方网站


攻击者无需真实AP密码,只需使victim STA断开原有衔接,尝试衔接FakeAP时,即可触发该缝隙。

宝运莱·(中国区)最新官方网站


CVE-2019-10126本地堆溢露马脚


该缝隙位于drivers/net/wireless/marvell/mwifiex/ie.c中的mwifiex_uap_parse_tail_ies函数,该函数用于解析用户层传递的beacon数据并将其传递给固件。在while循环的switch default分支中,当处置WLAN_EID_SSID和WLAN_EID_SUPP_RATES等之表的信息元素IE,则会挪用拷贝函数。补丁在拷贝函数前增长了对TLV的长度校验代码。


宝运莱·(中国区)最新官方网站


用户态利用法式(如wpa_suppliant,hostapd)通过netlink接口与内核�?榻型ㄑ�。在初始化过程中注册新闻号令和回调函数。


宝运莱·(中国区)最新官方网站


内核收到NL80211_CMD_START_AP新闻时,函数挪用链:


->nl80211_start_ap [cfg80211]
->rdev_start_ap [cfg80211]
->mwifiex_cfg80211_start_ap  [mwifiex]
->mwifiex_set_mgmt_ies [mwifiex]

->mwifiex_uap_parse_tail_ies [mwifiex]


若是机关特殊的beacon数据蕴含多个特殊类型的IE(例如WLAN_EID_SUPPORTED_OPERATING_CLASSES),将使得mwifiex_uap_parse_tail_ies循环挪用memcpy,导致本地溢出。


安全建议



Linux各刊行版缝隙布告:


https://security-tracker.debian.org/tracker/CVE-2019-3846
https://access.redhat.com/security/cve/cve-2019-3846

https://security-tracker.debian.org/tracker/CVE-2019-10126


补丁链接:


https://patchwork.kernel.org/patch/10967049/
https://patchwork.kernel.org/patch/10970141/