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

CVE-2025-71075: Linux内核aic94xx驱动设备移除时use-after-free漏洞

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

漏洞信息

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

相关标签

Linux内核use-after-freeaic94xx竞态条件本地提权SCSI驱动taskletCVE-2025-71075

漏洞概述

CVE-2025-71075是Linux内核中aic94xx SCSI主机适配器驱动的一个高危安全漏洞,CVSS评分7.8。该漏洞存在于设备的移除路径中,由于asd_pci_remove()函数在释放asd_ha结构之前未能正确同步pending状态的tasklets,导致潜在的use-after-free条件。当系统触发设备热拔插或模块卸载操作时,会在asd_ha结构的分配和释放之间产生竞态条件。攻击者可以通过精心构造的设备移除操作序列,在tasklet仍在访问已释放内存时触发内核崩溃或实现权限提升。此漏洞影响所有使用aic94xx驱动的Linux系统,需要本地低权限即可利用,无需用户交互。

技术细节

该漏洞的根本原因在于Linux内核aic94xx驱动的设备移除处理逻辑存在缺陷。在asd_pci_remove()函数执行设备清理时,代码直接释放了asd_ha结构(PCI适配器主机结构),但此时可能仍有tasklet(延迟执行的工作任务)在引用该结构。aic94xx驱动使用tasklet机制处理中断和异步I/O操作,当设备被移除时,如果tasklet尚未完成执行就被中断,而对应的内存已被释放,则会产生use-after-free漏洞。攻击者可通过反复执行设备热拔插操作或触发模块卸载来增加触发漏洞的概率。修复方案是在释放asd_ha结构之前调用tasklet_kill()函数,确保所有已调度的tasklets完成执行后再进行内存释放操作,从而消除竞态条件窗口。

攻击链分析

STEP 1
步骤1
攻击者获得系统本地低权限访问,需要能够操作设备或加载模块
STEP 2
步骤2
识别系统中运行aic94xx驱动的设备,确保驱动已加载
STEP 3
步骤3
通过I/O操作或中断触发,在驱动中创建pending状态的tasklets
STEP 4
步骤4
立即触发设备热拔插或模块卸载,调用asd_pci_remove()函数
STEP 5
步骤5
在tasklet仍在执行时触发asd_ha结构释放,产生use-after-free条件
STEP 6
步骤6
利用释放后使用的内存进行进一步攻击,可能导致内核崩溃或权限提升

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC concept for CVE-2025-71075 // Note: This is a conceptual demonstration, actual exploitation requires specific hardware #include <linux/module.h> #include <linux/pci.h> MODULE_LICENSE("GPL"); static int trigger_race_condition(struct pci_dev *dev) { // Trigger device removal while tasklets are pending // This would require specific aic94xx hardware // Step 1: Ensure aic94xx device is present and initialized if (!dev || dev->vendor != PCI_VENDOR_ID_ADAPTEC2) return -ENODEV; // Step 2: Trigger I/O operations to queue tasklets // This increases the likelihood of pending tasklets // Step 3: Immediately trigger device removal // Use hotplug or module unload to trigger asd_pci_remove() // Race condition window: // asd_pci_remove() frees asd_ha while tasklets may still access it return 0; } static int __init poc_init(void) { printk(KERN_INFO "CVE-2025-71075 PoC loaded\n"); return 0; } static void __exit poc_exit(void) { printk(KERN_INFO "CVE-2025-71075 PoC unloaded\n"); } module_init(poc_init); module_exit(poc_exit);

影响范围

Linux kernel aic94xx driver < 修复版本
具体影响版本需参考kernel.org提交的修复commit: 278455a82245a572aeb218a6212a416a98e418de等

防御指南

临时缓解措施
在官方补丁发布前,可通过以下措施缓解风险:1) 如果系统不使用aic94xx设备适配器,建议在黑名单中禁用该驱动模块;2) 限制非特权用户对设备热拔插操作的访问权限;3) 监控系统日志中的可疑内核错误信息;4) 使用内核参数禁止模块自动加载;5) 实施最小权限原则,确保只有必要的用户和进程具有硬件操作权限。

参考链接

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