作者:啟明星辰ADLab
原文鏈接:https://mp.weixin.qq.com/s/dUQb0XNNT8AQFUcVamG-oQ

背景

intel Wi-Fi芯片廣泛應用于個人筆記本電腦產品,如ThinkPad、Dell筆記本等。2020年ZDI組織披露了intel無線網卡windows驅動程序中存在的CVE-2020-0557 和 CVE-2020-0558漏洞。其中CVE-2020-0557 CSS評分為 8.1 分和 CVE-2020-0558評分為 8.2 分。通過這兩個漏洞攻擊者可以可以在受害者電腦中遠程執行任意代碼。

漏洞編號 影響的無線網卡
CVE-2020-0557 AC 7265 Rev D、AC 3168、AC 8265和AC8260
CVE-2020-0558 AC8265

CVE-2020-0558漏洞分析

漏洞原理

當AP熱點處理AssocReq時,會調用prvhPanClientSaveAssocResp函數保存AssocReq幀中SSID的值,在處理SSID的過程中,會調用parse_ie函數從數據幀中取出ssid的TLV結構,并調用memcpy_s函數將ssid的內容復制到目標緩沖區。在調用memcpy_s函數的時候,錯誤地使用ssid的length作為數據復制長度,當ssid的長度大于目標緩沖區的長度時,會導致緩沖區溢出。

圖1 CVE-2020-0558函數調用圖

問題代碼

調用parse_ie函數從數據幀中取出ssid的TLV結構,并調用memcpy_s函數將ssid的內容復制到目標緩沖區。在調用memcpy_s函數的時候,錯誤地使用ssid的length作為數據復制長度,當ssid的長度大于目標緩沖區的長度時,會導致緩沖區溢出。在下圖中,攻擊者可以控制*(v8+1)的值,可以拷貝超長的數據復制到目標地址中,從而導致緩沖區溢出。

圖2 prvhPanClientSaveAssocResp函數

漏洞修復

新版本的代碼中使用osalMemoryCopy函數替代了原來的memcpy_s函數,另外把SSID的拷貝的最大長度強制設為32字節,這樣就避免了緩存區溢出的問題。

圖3 CVE-2020-0558函數調用圖

CVE-2020-0557漏洞分析

漏洞原理:

當AP熱點處理AssocReq時,會調用prvhPanClientSaveAssocResp函數處理AssocReq幀中的數據,其中在函數中會調用prvGoVifClientAssocStoreSupportedChannels函數來處理及保存請求端通道信息,這其中prvGoVifClientAssocStoreSupportedChannels函數會循環調用utilRegulatoryClassToChannelList來處理RegulatoryClass(管制要求)信息。由于在循環處理沒有考慮目標的偏移是否越界,當AP熱點接收到AssocReq數據幀中RegulatoryClass信息單元有多個信道數據時會導致越界寫。

圖4 CVE-2020-0557函數調用圖

問題代碼

prvGoVifClientAssocStoreSupportedChannels函數

圖5 prvGoVifClientAssocStoreSupportedChannels函數

圖6 utilRegulatoryClassToChannelList函數

漏洞修復

在新版本 增進了對當前index的判斷,如果index大于255則退出循環。

圖7 修復后的utilRegulatoryClassToChannelList函數

參考

【1】https://www.thezdi.com/blog/2020/5/4/analyzing-a-trio-of-remote-code-execution-bugs-in-intel-wireless-adapters


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1578/