【原创误差】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/