【原创误差】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数据结构体现。


ku酷游(集团)官方网站


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

ku酷游(集团)官方网站


CVE-2019-3846远程堆溢出误差


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


ku酷游(集团)官方网站


误差触发的函数挪用链:


->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阶段 ,无需经由四次握手认证。


ku酷游(集团)官方网站


攻击者无需真实AP密码 ,只需使victim STA断开原有毗连 ,实验毗连FakeAP时 ,即可触发该误差。

ku酷游(集团)官方网站


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的长度校验代码。


ku酷游(集团)官方网站


用户态应用程序(如wpa_suppliant,hostapd)通过netlink接口与内核�?榫傩型ㄑ�。在初始化历程中注册新闻下令和回调函数。


ku酷游(集团)官方网站


内核收到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/