CVE-2022-50508CVE-2022-50508是Linux内核mt76x0无线网卡驱动中存在的一个高危越界访问漏洞。该漏洞位于mt76x0_phy_get_target_power函数中,由于数据结构变更后未正确更新访问逻辑,导致在获取目标功率时可能出现数组越界读取。
具体而言,在提交ba45841ca5eb("wifi: mt76: mt76x02: simplify struct mt76x02_rate_power")之后,mt76x02驱动对结构体mt76x02_rate_power进行了简化重构。重构后,代码使用ht[0-7]速率功率数据来处理VHT(Very High Throughput)模式的MCS(Modulation and Coding Scheme){0,7},而使用vht[0-1]速率功率数据来处理VHT模式的MCS{8,9}。然而,mt76x0_phy_get_target_power函数并未针对这一变更进行相应的适配,导致在特定条件下访问数组时可能越界。
该漏洞的CVSS 3.1评分为7.1分,属于高危级别。攻击者需要具有本地低权限访问能力,无需用户交互即可触发。漏洞的成功利用可能导致高机密性影响(敏感信息泄露)和高可用性影响(系统崩溃或拒绝服务),但不会影响数据完整性。该漏洞影响了使用mt76x0系列无线网卡的Linux系统,包括多种嵌入式设备和Linux桌面/服务器发行版。
该漏洞的技术根源在于mt76x02_rate_power结构体的重构。在原始设计中,VHT速率的功率数据存储在独立的数组中。提交ba45841ca5eb对结构体进行了简化,将VHT MCS{0,7}的功率数据合并到ht[0-7]数组中,而VHT MCS{8,9}则保留在vht[0-1]数组中。
在mt76x0_phy_get_target_power函数中,当处理VHT速率时,代码通过索引访问rate_power数组的对应元素。如果索引计算逻辑未根据新的数据结构进行更新,就可能访问超出数组实际大小的内存区域。例如,当请求VHT MCS索引对应的功率值时,代码可能错误地访问了ht数组之外的内存位置,或者反之。
利用方式方面,由于这是一个本地权限漏洞,攻击者需要能够在目标系统上执行代码。通常的利用场景包括:
1. 攻击者通过本地账户登录系统
2. 通过特定工具(如iw、iwconfig或自定义程序)配置mt76x0无线网卡
3. 触发mt76x0_phy_get_target_power函数的执行路径
4. 通过精心构造的速率参数或信道参数,使函数访问越界内存
成功利用后,攻击者可以读取内核内存中的敏感数据(机密性影响),或者导致内核崩溃(可用性影响)。该漏洞不能直接用于修改数据(完整性无影响),但可能为后续的内核信息泄露或权限提升攻击提供基础。