IPBUF安全漏洞报告
English
CVE-2025-71154 CVSS 5.5 中危

CVE-2025-71154 Linux内核rtl8150驱动内存泄漏漏洞

披露日期: 2026-01-23
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2025-71154
漏洞类型
内存泄漏
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel rtl8150 USB网络驱动

相关标签

内存泄漏Linux内核rtl8150USB驱动本地提权拒绝服务CVE-2025-71154net/usbasync_set_registers

漏洞概述

CVE-2025-71154是Linux内核中rtl8150 USB网络驱动程序的一个内存泄漏漏洞。该漏洞存在于async_set_registers()函数中,当usb_submit_urb()调用失败时,函数未能正确释放已分配的async_req结构体和URB(USB Request Block),导致内核内存泄漏。攻击者可以通过本地低权限访问,利用恶意USB设备触发该漏洞,造成系统可用性下降。由于该漏洞影响可用性(Availability)而非机密性或完整性,因此CVSS评分为5.5,属于中等严重程度。攻击复杂度低,无需用户交互即可利用,但需要物理接触或通过其他方式连接恶意USB设备到目标系统。

技术细节

在rtl8150驱动的async_set_registers()函数中,代码首先分配async_req结构体和URB,然后调用usb_submit_urb()将URB提交到USB子系统。正常情况下,当URB完成时(无论成功或失败),完成回调函数async_set_reg_cb()会被调用,负责释放async_req和URB资源。然而,当usb_submit_urb()调用失败时,代码直接返回错误,跳过了资源释放步骤。由于回调函数从未被执行,已分配的内存永远不会被释放。攻击者可以通过构造特定的USB设备操作序列,使usb_submit_urb()失败,从而触发内存泄漏。反复利用此漏洞可导致系统内存逐渐耗尽,最终影响系统稳定性和可用性。该漏洞影响Linux内核的net/usb/rtl8150组件,CVSS向量显示为本地攻击(AV:L)、低权限要求(PR:L)、无需用户交互(UI:N),对可用性造成高影响(A:H)。

攻击链分析

STEP 1
步骤1
攻击者获取目标系统的本地低权限访问权限
STEP 2
步骤2
攻击者连接恶意构造的USB设备或利用现有rtl8150设备触发异常条件
STEP 3
步骤3
rtl8150驱动的async_set_registers()函数被调用,分配async_req结构和URB
STEP 4
步骤4
usb_submit_urb()因设备异常或参数错误而失败,返回非零值
STEP 5
步骤5
函数在错误路径中未释放已分配的async_req和URB,导致内存泄漏
STEP 6
步骤6
攻击者反复触发漏洞,逐渐消耗系统内存,最终导致可用性下降或系统崩溃

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <linux/module.h> #include <linux/usb.h> #include <linux/netdevice.h> #define RTL8150_VENDOR_ID 0x0bda #define RTL8150_PRODUCT_ID 0x8150 static int trigger_memory_leak(struct usb_device *udev) { struct urb *urb; struct async_req *req; int ret; // Allocate async_req structure req = kzalloc(sizeof(struct async_req), GFP_KERNEL); if (!req) return -ENOMEM; // Allocate URB urb = usb_alloc_urb(0, GFP_KERNEL); if (!urb) { kfree(req); return -ENOMEM; } // Initialize URB with invalid parameters to force failure usb_fill_bulk_urb(urb, udev, usb_sndbulkpipe(udev, 0), req->data, sizeof(req->data), NULL, req); // Submit URB - may fail under certain conditions ret = usb_submit_urb(urb, GFP_KERNEL); if (ret != 0) { // BUG: In vulnerable version, urb and req are NOT freed here // This causes memory leak printk(KERN_ALERT "URB submission failed: %d\n", ret); // In fixed version, add: // usb_free_urb(urb); // kfree(req); return ret; } return 0; } MODULE_LICENSE("GPL");

影响范围

Linux Kernel rtl8150 driver (versions before fix commit 12cab1191d9890097171156d06bfa8d31f1e39c8)
Linux Kernel rtl8150 driver (versions before fix commit 151403e903840c9cf06754097b6732c14f26c532)
Linux Kernel rtl8150 driver (versions before fix commit 2f966186b99550e3c665dbfb87b8314e30acea02)
Linux Kernel rtl8150 driver (versions before fix commit 4bd4ea3eb326608ffc296db12c105f92dc2f2190)
Linux Kernel rtl8150 driver (versions before fix commit 6492ad6439ff1a479fc94dc6052df3628faed8b6)

防御指南

临时缓解措施
在官方补丁发布前,可以通过以下措施缓解风险:1) 监控系统内存使用情况,设置告警阈值检测异常内存消耗;2) 限制非授权USB设备的连接,使用USB设备白名单策略;3) 在容器或虚拟机环境中运行不可信的USB设备;4) 使用内核配置选项禁用不常用的USB网络驱动;5) 部署主机入侵检测系统(HIDS)监控内核模块加载和行为异常。

参考链接

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