CVE-2023-53659CVE-2023-53659是Linux内核iavf(Intel Adaptive Virtual Function)驱动中存在的一个高危越界访问漏洞。该漏洞源于iavf_remove()函数中处理通道数(channels)设置的逻辑缺陷。当在设备移除过程中设置较大的通道数时,如果等待重置完成(reset done)超时,函数会返回错误,但在此之前已经直接修改了num_active_queues的值。由于num_active_queues的值大于实际分配的tx/rx_rings[]数组大小,后续调用iavf_free_all_tx_resources()等函数时会触发KASAN检测到的slab-out-of-bounds错误,导致内核崩溃。该漏洞需要本地低权限访问,但可造成高机密性影响和高可用性影响,攻击者可利用此漏洞导致系统拒绝服务或读取超出边界的内存数据。漏洞通过SR-IOV虚拟功能的创建/销毁与ethtool通道数设置的并发操作触发,属于典型的竞态条件导致的内存安全问题。
该漏洞的技术原理如下:iavf驱动在iavf_remove()函数中处理通道数变更请求时,会先修改adapter->num_active_queues的值,然后等待硬件重置完成(wait_for_reset)。如果在等待过程中超时,函数会返回错误码,但此时num_active_queues已经被修改为较大的值,而对应的tx_rings[]和rx_rings[]数组并未按新值重新分配。当后续调用iavf_free_all_tx_resources()或iavf_free_all_rx_resources()遍历这些数组时,会访问超出实际分配范围的内存区域,触发KASAN的slab-out-of-bounds检测。
漏洞的触发需要以下竞态条件:1)通过sysfs接口(sriov_numvfs)频繁创建和销毁SR-IOV虚拟功能;2)同时通过ethtool工具(ethtool -L)修改VF的通道数;3)当VF设备正在被移除时执行通道数变更操作。攻击者可通过精心设计的并发操作序列,使iavf_remove()在错误的状态下修改num_active_queues,从而触发越界访问。修复方案是在修改num_active_queues之前检查重置状态,或在超时后回滚num_active_queues的修改,确保数据一致性。