作者:启明星辰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 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1578/