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

Linux内核ASIX USB驱动PHY地址验证缺失漏洞(CVE-2025-71094)

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

漏洞信息

漏洞编号
CVE-2025-71094
漏洞类型
输入验证缺失
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel ASIX USB Ethernet Driver

相关标签

CVE-2025-71094Linux KernelASIX USB Driver输入验证缺失PHY地址验证本地攻击拒绝服务net/usb/asixmdiobus内核驱动漏洞

漏洞概述

CVE-2025-71094是Linux内核中ASIX USB以太网驱动程序的一个输入验证安全漏洞。该漏洞存在于net/usb/asix驱动模块中,由于asix_read_phy_addr()函数在读取USB设备提供的PHY地址时缺少边界验证,可能导致安全风险。攻击者可以通过恶意或故障的USB设备向系统返回一个无效的PHY地址(大于等于PHY_MAX_ADDR),当该地址被传递给mdiobus_get_phy()函数时,会触发内核警告"addr 207 out of range",造成拒绝服务或不可预期的系统行为。此漏洞需要本地物理访问USB端口,攻击复杂度低,无需特殊权限或用户交互即可触发。CVSS 3.1基础评分为5.5(中危),主要影响系统可用性。

技术细节

漏洞根源在于ASIX USB以太网驱动中的asix_read_phy_addr()函数直接使用从USB设备读取的PHY地址值,而未进行有效性检查。在Linux内核的MDIO总线架构中,PHY地址必须小于PHY_MAX_ADDR常量(通常为32)。当恶意USB设备返回一个超出范围的PHY地址(如207)时,mdiobus_get_phy()函数会触发WARNING并可能导致系统不稳定。攻击者只需将一个模拟ASIX设备的恶意USB设备插入目标系统的USB端口,即可触发此漏洞。修复方案是在asix_read_phy_addr()函数中添加PHY_MAX_ADDR边界检查,拒绝无效地址并返回错误码。同时,ax88172a.c中的冗余检查可以被移除,因为验证逻辑已在底层函数中实现。

攻击链分析

STEP 1
步骤1
攻击者获得目标系统的物理访问权限,将恶意USB设备插入系统的USB端口
STEP 2
步骤2
恶意USB设备模拟ASIX USB以太网设备,响应一个超出有效范围的PHY地址(如207)
STEP 3
步骤3
Linux内核的asix_read_phy_addr()函数读取该无效PHY地址,未进行边界验证直接返回
STEP 4
步骤4
无效的PHY地址被传递给mdiobus_get_phy()函数,触发内核警告"addr 207 out of range"
STEP 5
步骤5
漏洞导致系统可用性受到影响,可能造成网络子系统不稳定或拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-71094 PoC - Malicious ASIX USB Device Emulation // This PoC demonstrates the PHY address validation issue // Requires: Python with pyusb, libusb, and a USB device or emulator #include <linux/usb.h> #include <linux/netdevice.h> #include <linux/phy.h> // Simulate malicious USB device returning invalid PHY address #define MALICIOUS_PHY_ADDR 207 // >= PHY_MAX_ADDR (32) #define PHY_MAX_ADDR 32 // Vulnerable function - asix_read_phy_addr() int asix_read_phy_addr(struct usb_device *udev, bool external) { int phy_addr; // VULNERABILITY: No validation before returning phy_addr = asix_read_cmd(udev, AX_CMD_READ_PHY_ID, ...); // Missing validation: // if (phy_addr >= PHY_MAX_ADDR) // return -EINVAL; return phy_addr; // Returns invalid address } // Trigger function void trigger_vulnerability(void) { struct usb_device *fake_device; int phy_addr; // Simulate malicious device response phy_addr = MALICIOUS_PHY_ADDR; // This will trigger warning in mdiobus_get_phy(): // "addr 207 out of range" printk("Testing with invalid PHY addr: %d\n", phy_addr); // Kernel warning triggered here mdiobus_get_phy(bus, phy_addr); } // FIX: Add validation in asix_read_phy_addr() int asix_read_phy_addr_fixed(struct usb_device *udev, bool external) { int phy_addr; phy_addr = asix_read_cmd(udev, AX_CMD_READ_PHY_ID, ...); // FIX: Validate PHY address range if (phy_addr < 0 || phy_addr >= PHY_MAX_ADDR) { dev_err(&udev->dev, "Invalid PHY address: %d\n", phy_addr); return -EINVAL; } return phy_addr; }

影响范围

Linux Kernel (net: usb: asix driver) - 验证在以下版本修复:
5.15.y < 5.15.163
6.1.y < 6.1.105
6.6.y < 6.6.47
6.10.y < 6.10.6
6.11.y < 6.11-rc7

防御指南

临时缓解措施
如果无法立即升级内核,可通过以下措施临时缓解:1) 在BIOS/UEFI中禁用不使用的USB控制器;2) 使用USB设备白名单策略阻止未知设备接入;3) 在系统启动时通过modprobe黑名单禁用asix模块(echo 'blacklist asix' > /etc/modprobe.d/asix-blacklist.conf);4) 监控内核日志中的mdiobus_get_phy警告信息以便及时发现攻击尝试。

参考链接

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