CVE-2026-31619CVE-2026-31619 是 Linux 内核中 ALSA Fireworks 驱动程序的一个安全漏洞。该漏洞源于驱动程序在处理来自 Firewire 设备的状态响应时,未对设备提供的 32 位状态值进行严格的边界检查。由于 `efr_status_names[]` 数组仅有 17 个条目,当设备返回超出此范围的值(如 0x80000000)时,驱动程序将其直接作为数组索引使用,导致越界读取内存。此漏洞可能被利用来触发内核崩溃或拒绝服务,并在特定情况下导致信息泄露。
该漏洞位于 Linux 内核的 `sound/firewire/fireworks/` 模块中。漏洞产生的具体原因在于,当驱动程序与 Firewire 音频设备通信时,会调用一个函数来处理设备返回的响应数据包。该数据包中包含一个 `status` 字段,该字段是一个完全由外部设备控制的 32 位整数。代码逻辑试图使用该 `status` 值作为索引,在预定义的 `efr_status_names[]` 字符串数组中查找对应的错误消息字符串以便打印日志。然而,原始代码缺失了关键的边界检查步骤,即未判断 `status` 值是否小于数组长度(17)。攻击者可以通过特制的 Firewire 设备发送包含特定 `status` 值(例如 0x80000000,即 `EFR_STATUS_INCOMPLETE`)的数据包。当内核驱动解析此值并尝试访问数组时,会计算出非法的内存地址,导致内核读取非预期内存区域(越界读取)。虽然这主要是一个读取操作,但访问非法地址(如内核空间高地址)极大概率会触发页面错误,导致系统内核恐慌,从而实现本地拒绝服务攻击。