CVE-2023-53548CVE-2023-53548是Linux内核usbnet网络驱动中存在的一个安全漏洞。该漏洞由syzbot模糊测试工具发现,存在于drivers/net/usb/usbnet.c文件中的usbnet_start_xmit函数中。当驱动程序提交USB请求块(URB)时,系统会产生警告信息'BOGUS urb xfer, pipe 3 != type 1',表明USB管道类型与端点类型不匹配。
该漏洞的根本原因是usbnet驱动在probe例程中信任driver_info结构中提供的批量端点地址,而没有验证这些端点是否实际存在以及是否具有预期的类型和方向。这种缺乏验证的设计可能导致驱动程序尝试使用不存在的或不匹配的端点进行数据传输,从而触发内核警告并在某些情况下导致系统不稳定。
从CVSS 3.1评分向量来看,该漏洞的利用需要本地访问权限(AV:L)、低权限(PR:L)、无需用户交互(UI:N),其影响主要体现在可用性方面(A:H),机密性和完整性不受影响。这意味着攻击者需要已经在系统上拥有有限的权限才能触发此漏洞,但成功利用后可能导致系统崩溃或内核异常,对系统可用性造成高影响。该漏洞已在Linux内核的多个稳定版本中修复。
该漏洞的技术原理涉及Linux内核usbnet驱动的端点验证机制缺陷。usbnet驱动是一个通用的USB网络设备驱动框架,用于支持各种USB转以太网设备。在驱动初始化(probe)阶段,驱动程序会从driver_info结构中获取批量输入和输出端点的地址信息。
漏洞的核心问题在于:usbnet驱动直接信任这些端点地址,而没有通过USB核心层验证端点是否真实存在、端点类型是否正确(批量传输 vs 控制/中断/等时传输)、以及端点方向是否匹配预期。
当usbnet_start_xmit函数被调用以发送网络数据包时,它会调用usb_submit_urb提交一个URB到USB核心层。USB核心层在usb_submit_urb函数(drivers/usb/core/urb.c:504)中发现URB的管道类型与端点描述符中的类型不匹配,触发警告'BOGUS urb xfer, pipe 3 != type 1'。
利用方式方面,攻击者可以通过以下步骤触发该漏洞:
1. 拥有本地低权限访问权限
2. 插入一个恶意的USB网络设备或利用现有的usbnet驱动支持的设备
3. 构造特定的driver_info结构,使端点地址指向不存在的或不匹配的端点
4. 触发网络数据包发送操作
5. 内核检测到URB类型不匹配,发出警告并可能导致系统异常
修复方案是在probe例程中添加端点验证检查,确保driver_info中提供的端点地址对应的端点确实存在且类型和方向正确。