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

CVE-2025-71108: Linux内核UCSI驱动num_connectors字段处理不当导致系统启动失败

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

漏洞信息

漏洞编号
CVE-2025-71108
漏洞类型
不正确配置/固件缺陷
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (UCSI驱动), Lenovo P1 G8

相关标签

Linux KernelUCSI驱动USB Type-C固件缺陷系统启动失败LenovoCVE-2025-71108DoS内核驱动漏洞ACPI

漏洞概述

CVE-2025-71108是Linux内核中USB Type-C Connector System Interface (UCSI)驱动的安全漏洞。该漏洞源于UCSI规范中num_connectors字段的定义与某些固件实现不一致。根据UCSI规范,num_connectors字段应为7位,第8位为保留位应设为0。然而,部分有缺陷的固件(如Lenovo P1 G8设备上的固件)错误地设置了这个保留位,导致内核在解析该字段时出现异常,进而造成系统无法正常启动。这是一个典型的固件兼容性问题,影响范围主要集中在使用问题固件的Lenovo设备上。漏洞的严重性在于其导致的可用性影响(系统无法启动),而非传统意义上的代码执行或数据泄露。内核社区已通过补丁添加了错误检测和自动修正机制,在检测到固件不正确行为时自动修正num_connectors值,确保系统能够正常启动。

技术细节

漏洞位于Linux内核的drivers/usb/typec/ucsi目录下的UCSI驱动代码中。UCSI是USB-IF定义的USB Type-C接口标准,用于管理USB Type-C连接器的配置和功能。UCSI规范明确定义num_connectors字段为7位宽度(范围0-127),用于表示支持的连接器数量,第8位为保留位必须为0。在问题固件中,这个保留位被错误地设置为1,导致内核读取到的num_connectors值超出了预期范围。当内核尝试根据这个错误的连接器数量分配资源或遍历连接器列表时,会触发各种异常情况,最严重的是导致系统启动过程卡死或崩溃。具体的技术问题表现为:内核在解析ACPI或设备固件提供的UCSI数据结构时,直接读取8位的num_connectors字段而未进行位掩码处理。当第8位被设置时,实际读取到的值会大于127,内核可能尝试分配过大的内存或创建超出预期的连接器对象,最终导致资源分配失败或内存访问越界。修复方案是在读取num_connectors字段后立即应用0x7F位掩码,确保只使用有效的7位数据,并在检测到保留位被设置时记录警告信息。

攻击链分析

STEP 1
步骤1
设备固件初始化:问题固件在USB Type-C UCSI接口初始化时,错误地将num_connectors字段的第8位(保留位)设置为1,而不是规范要求的0
STEP 2
步骤2
内核驱动解析:Linux内核的UCSI驱动读取固件提供的ACPI表或设备配置数据,获取包含错误num_connectors值的连接器能力结构
STEP 3
步骤3
资源分配异常:内核在未应用位掩码的情况下使用num_connectors值,尝试分配超出预期的内存或创建超出数量的连接器对象
STEP 4
步骤4
系统启动失败:资源分配失败或内存访问越界导致内核在启动阶段崩溃、挂起或进入不可恢复的错误状态,系统无法完成启动过程

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC: 触发UCSI num_connectors字段解析错误 // 此PoC模拟问题固件的数据结构,用于验证内核补丁的修复效果 #include <stdio.h> #include <stdint.h> // UCSI connector capability structure struct ucsi_connector_capability { uint8_t num_connectors; // Buggy FW sets bit 7 (reserved) uint8_t op_mode; uint16_t flags; } __attribute__((packed)); // Simulate buggy firmware data (bit 7 set incorrectly) unsigned char buggy_firmware_data[] = { 0x82, // num_connectors with reserved bit set (should be 0x02) 0x01, // operating mode 0x00, 0x00 // flags }; int main() { struct ucsi_connector_capability *cap = (struct ucsi_connector_capability *)buggy_firmware_data; printf("Buggy num_connectors value: 0x%02x (%d)\n", cap->num_connectors, cap->num_connectors); // Vulnerable code (without fix) printf("Without fix - num_connectors: %d\n", cap->num_connectors); // Fixed code (with bitmask) uint8_t fixed_num_connectors = cap->num_connectors & 0x7F; printf("With fix (0x7F mask) - num_connectors: %d\n", fixed_num_connectors); // Verify the fix if (fixed_num_connectors <= 127 && (cap->num_connectors & 0x80)) { printf("WARNING: Firmware sets reserved bit in num_connectors!\n"); printf("Auto-corrected value from %d to %d\n", cap->num_connectors, fixed_num_connectors); } return 0; }

影响范围

Linux Kernel UCSI驱动 - 存在问题的固件版本(Lenovo P1 G8特定固件)
Linux Kernel主线版本 < 修复提交 07c8d2a109d847775b3b4e2c3294c8e1eea75432
Linux Kernel主线版本 < 修复提交 132fe187e0d940f388f839fe2cde9b84106ad20d
Linux Kernel主线版本 < 修复提交 3042a57a8e8bce4a3100c3f6f03dc372aab24943
Linux Kernel主线版本 < 修复提交 30cd2cb1abf4c4acdb1ddb468c946f68939819fb
Linux Kernel主线版本 < 修复提交 58941bbb0050e365a98c64f1fc4a9a0ac127dba6

防御指南

临时缓解措施
由于该漏洞主要由固件问题引起,临时缓解措施有限。建议措施包括:1) 在BIOS/UEFI设置中尝试禁用USB Type-C接口以绕过UCSI驱动初始化;2) 使用较旧的内核版本启动系统(如果可用);3) 联系设备厂商获取固件更新;4) 如果系统已无法启动,可尝试使用外部启动介质引导系统后挂载磁盘进行修复。最终解决方案需要同时更新内核补丁和设备固件。

参考链接

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