CVE-2025-39952CVE-2025-39952是Linux内核中Microchip wilc1000 WiFi驱动存在的一个缓冲区溢出漏洞。该漏洞位于drivers/net/wireless/microchip/wilc1000/wlan_cfg.c文件的wilc_wlan_parse_response_frame()函数中,具体问题出现在处理WID(Wireless Identification)字符串配置时。当驱动程序从固件接收数据并解析响应帧时,由于缺少对目标缓冲区大小的有效检查,可能导致memcpy操作发生缓冲区溢出。Smatch静态分析工具检测到该问题,提示存在'__memcpy()' 'cfg->s[i]->str' copy overflow (512 vs 65537)的错误,表明源数据最大可达65537字节,而目标缓冲区仅有512字节。该漏洞CVSS评分为7.8,属于高危级别,具有本地攻击向量、低权限要求、无需用户交互的特点,攻击成功后可能导致机密性、完整性和可用性均受到严重影响。攻击者可以利用该漏洞在内核上下文中执行任意代码或导致系统崩溃。
该漏洞的根本原因在于wilc1000驱动在处理来自固件的WID字符串配置数据时,未对输入数据进行充分的长度验证。具体技术细节如下:
1. 漏洞位置:drivers/net/wireless/microchip/wilc1000/wlan_cfg.c第184行的wilc_wlan_parse_response_frame()函数。
2. 触发条件:当固件返回响应帧时,驱动程序解析其中的WID配置数据。对于WID字符串类型配置,数据被复制到cfg->s[i]->str缓冲区中。
3. 溢出机制:目标缓冲区cfg->s[i]->str的大小为512字节,但来自固件的字符串数据长度可达65537字节。当执行memcpy操作时,会将超出目标缓冲区容量的数据写入相邻内存区域。
4. 修复方案:补丁引入了基于WID类型的大小检查机制。对于WID字符串配置,大小限制由struct wilc_cfg_str_vals中各个元素的大小确定,并保存在struct wilc_cfg_str的len字段中。在执行memcpy之前,驱动程序会验证数据长度不超过预定义的最大值。
5. 利用方式:攻击者需要拥有本地系统访问权限(低权限即可),通过恶意固件模拟或中间人攻击向wilc1000设备发送特制的响应帧数据,触发缓冲区溢出,从而在内核态执行任意代码或导致拒绝服务。