IPBUF安全漏洞报告
English
CVE-2023-53548 CVSS 5.5 中危

CVE-2023-53548 Linux内核usbnet驱动端点验证缺失漏洞

披露日期: 2025-10-04
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2023-53548
漏洞类型
输入验证不当/资源管理错误
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核 (usbnet驱动)

相关标签

Linux内核usbnet驱动USB驱动输入验证本地提权拒绝服务可用性影响内核漏洞CVE-2023-53548中危漏洞

漏洞概述

CVE-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中提供的端点地址对应的端点确实存在且类型和方向正确。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者需要获得目标系统的本地低权限访问权限,可以通过物理访问、USB设备插入或其他本地提权途径实现。
STEP 2
步骤2:构造恶意USB网络设备
攻击者制作一个特殊的USB网络设备或利用现有usbnet驱动支持的设备,配置driver_info结构使端点地址指向不存在的或不匹配的端点。
STEP 3
步骤3:触发网络传输
通过系统调用或网络操作触发usbnet_start_xmit函数,驱动程序尝试通过usb_submit_urb提交URB进行数据传输。
STEP 4
步骤4:触发内核警告
USB核心层检测到URB的管道类型与端点描述符中的类型不匹配,触发警告'BOGUS urb xfer, pipe 3 != type 1'。
STEP 5
步骤5:导致系统不稳定
持续的触发可能导致内核异常、系统资源耗尽或系统崩溃,严重影响系统可用性。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2023-53548 PoC - Trigger BOGUS urb warning in usbnet driver // This PoC demonstrates how to trigger the vulnerability by submitting // a URB with mismatched pipe type through the usbnet driver #include <linux/module.h> #include <linux/usb.h> #include <linux/netdevice.h> #include <linux/etherdevice.h> // Malicious driver_info with invalid endpoint configuration static const struct driver_info malicious_info = { .description = "Malicious USB Network Device", // Intentionally set bulk_in and bulk_out to invalid endpoints // that don't match the actual endpoint types .bulk_in = 0x83, // Endpoint with wrong type (e.g., interrupt instead of bulk) .bulk_out = 0x03, // Endpoint with wrong type or direction .flags = FLAG_ETHER | FLAG_POINTTOPOINT, }; // Simulate the vulnerable code path static int trigger_vuln(struct usbnet *dev, struct sk_buff *skb) { struct urb *urb; int retval; // Allocate URB for transmission urb = usb_alloc_urb(0, GFP_ATOMIC); if (!urb) return -ENOMEM; // Fill URB with bulk transfer setup using potentially invalid endpoint usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, dev->driver_info->bulk_out), skb->data, skb->len, NULL, skb); // This submission will trigger the WARNING if endpoint is invalid retval = usb_submit_urb(urb, GFP_ATOMIC); // Expected output: // usb 1-1: BOGUS urb xfer, pipe 3 != type 1 // WARNING: CPU: 0 PID: 754 at drivers/usb/core/urb.c:504 usb_submit_urb usb_free_urb(urb); return retval; } MODULE_LICENSE("GPL");

影响范围

Linux kernel < 6.4 (受影响的开发版本)
Linux kernel stable分支需要应用补丁的所有版本

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)限制对系统的物理访问权限,防止攻击者插入恶意USB设备;2)通过USB设备白名单机制仅允许已知和可信的USB网络设备接入;3)监控系统日志,及时发现'BOGUS urb xfer'相关警告信息;4)禁用非必要的USB网络适配器驱动模块;5)使用USBGuard等工具对USB设备进行访问控制。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表