CVE-2023-53582CVE-2023-53582是Linux内核中brcmfmac WiFi驱动程序的一个栈越界读取漏洞。该漏洞位于brcmf_c_preinit_dcmds()函数中,当处理CLM(Country Locale Matrix)版本字符串时,由于缓冲区未进行空终止(null-terminated)处理,导致在调用strreplace()函数时发生栈越界读取操作。brcmfmac是Broadcom FullMAC WiFi驱动,支持多种Broadcom无线芯片。该漏洞由修改版syzkaller工具发现,触发时内核会报告KASAN(Kernel Address Sanitizer)检测到的栈越界读取错误。攻击者可通过插入特制的USB WiFi设备或利用相关接口触发该漏洞,导致内核读取超出栈缓冲区边界的数据,可能造成系统不稳定、信息泄露或内核崩溃等问题。由于该漏洞需要本地权限才能触发(AV:L),且影响主要体现在可用性方面(机密性和完整性影响较低),CVSS评分为5.5,属于中等严重级别。该漏洞影响多个Linux内核稳定版本,修复补丁已合并到主线内核中。
该漏洞的根本原因在于brcmf_fil_iovar_data_get()函数使用memcpy()将CLM版本字符串填充到缓冲区'buf'中,但未在缓冲区末尾添加空终止符(null terminator)。随后在brcmf_c_preinit_dcmds()函数中,该未终止的缓冲区被传递给strreplace()函数,strreplace()内部使用strlen()或类似机制遍历字符串以查找需要替换的字符,由于缺少空终止符,函数会持续读取超出缓冲区边界的栈内存数据,从而触发栈越界读取漏洞。
利用方式:攻击者需要本地权限(PR:L),通过以下步骤触发漏洞:
1. 插入特制的USB WiFi适配器或模拟Broadcom设备
2. 当内核加载brcmfmac驱动并执行brcmf_attach()时
3. 调用brcmf_c_preinit_dcmds()函数处理CLM版本信息
4. strreplace()在处理未终止的CLM版本字符串时触发KASAN报告的栈越界读取
漏洞触发后,内核会在dmesg中输出KASAN错误信息,包括堆栈跟踪和读取越界的地址。该漏洞虽然不会直接导致权限提升或代码执行,但可被利用导致内核拒绝服务(DoS)或在特定条件下泄露栈内存中的敏感信息。修复方案是在缓冲区使用前确保其被正确空终止。