Linux 内核中 USB 音频驱动程序存在一个严重漏洞,该漏洞可能导致内存越界读取。最近,SUSE 公司的 Takashi Iwai 编写了一个针对 Linux 内核的补丁,解决了这一问题。
Linux 内核中的 USB 音频驱动程序存在内存越界访问漏洞,这可能使得能够物理接触系统的攻击者利用恶意 USB 设备来提升权限、修改系统内存或运行任意代码。
Linux 内核更新修复 USB 音频漏洞 该修复方案由 Linux 基金会的 Greg Kroah-Hartman 于 2024 年 12 月 14 日提交,提升了使用 USB 音频设备的系统中驱动程序的稳定性和安全性。
攻击原理
当 USB 音频设备提供的描述符的 “bLength” 值比预期的结构大小短的时候,就会出现这个漏洞。在原来的代码中,驱动程序盲目地认为 descriptor 是完整的,并试图读取其字段,如 clock ID 或 pin arrays。
如果由于硬件缺陷或蓄意操纵导致描述符被截断,驱动程序可能会读取超出已分配内存缓冲区的范围,访问到相邻的、非预期的区域。
这种内存越界读取可能会从内核内存中泄露敏感数据,比如指针或用户信息,或者通过访问无效内存地址导致系统崩溃。
在最坏的情况下,技术娴熟的攻击者可以将这个漏洞与其他漏洞利用手段结合起来,以提升权限或执行任意代码,不过这样的攻击需要对 USB 设备进行精确控制,并且还需要其他漏洞的配合。
Iwai 在补丁说明中表示:“这次更新是保护与 USB 音频硬件交互的 Linux 系统的一个积极举措。” 该修复方案已被反向移植到稳定的内核分支中,确保各种发行版的用户都能从增强的安全性中受益。
时钟选择器描述符包含一个可变长度数组和其他字段,鉴于其在 USB 音频类(UAC)第 2 版和第 3 版中的复杂性,它将接受更全面的验证。
加强 USB 音频安全性
这个问题的根源在于驱动程序未能验证 USB 音频设备提供的时钟描述符的 “bLength” 字段。
如果没有这些检查,长度不足的格式错误或恶意构造的描述符可能会触发超出已分配范围的内存访问,有可能导致系统崩溃或被利用。
这个漏洞最初是由 Google 的 Benoît Sevens 报告的,这凸显了它对更广泛的 Linux 社区的重要性。
该补丁对应的提交记录为 ab011f7439d9bbfd34fd3b9cef4b2d6d952c9bb9,它在时钟描述符验证函数中引入了严格的合理性检查。
此次修改仅涉及 sound/usb/clock.c 文件中的 24 行代码,但对于依赖 Linux 进行音频处理的音乐爱好者、开发人员和企业来说,其影响重大。
建议用户更新他们的内核以包含这个补丁,该补丁可通过下载 linux-ab011f7439d9bbfd34fd3b9cef4b2d6d952c9bb9.tar.gz 获取。
这一事态发展凸显了 Linux 社区持续致力于迅速解决漏洞问题,并维护操作系统坚固可靠的声誉。
文章原文链接:https://www.anquanke.com/post/id/306331