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

CVE-2026-43192: Linux内核dm-mpath资源泄漏漏洞

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

漏洞信息

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

相关标签

Linux Kernel资源泄漏拒绝服务本地漏洞CVE-2026-43192Device Mapper

漏洞概述

Linux内核的设备映射器多路径组件存在资源管理漏洞。在解析路径时,若获取SCSI设备处理程序名称失败(例如内存不足),代码未能调用`dm_put_device`释放已获取的路径设备引用。这导致引用计数泄漏,设备对象无法被回收。本地低权限攻击者可利用此缺陷持续消耗系统资源,最终导致系统内存耗尽或崩溃。

技术细节

该漏洞源于Linux内核`drivers/md/dm-mpath.c`中`parse_path`函数的错误处理缺陷。在处理多路径设备时,该函数首先调用`dm_get_device`获取路径设备的引用,随后调用`scsi_dh_attached_handler_name`以获取SCSI设备处理程序的名称。当`scsi_dh_attached_handler_name`因内存不足(-ENOMEM)或其他原因失败时,代码直接跳转到错误处理流程并返回,却遗漏了对之前获取的路径设备引用进行释放(即未调用`dm_put_device`)。这种逻辑错误导致路径设备的引用计数永远不会归零,使得相关的内核内存结构和设备对象无法被系统垃圾回收机制释放。攻击者可以通过发送特制的I/O控制命令或构建特定的多路径配置,反复触发该错误路径。随着时间推移,泄漏的内存资源不断累积,最终可能导致系统内存耗尽,触发OOM Killer杀掉关键进程,或导致设备管理子系统无响应,从而实现本地拒绝服务攻击。

攻击链分析

STEP 1
步骤1
攻击者获得本地系统的低权限访问权限。
STEP 2
步骤2
攻击者与设备映射器(Device Mapper)进行交互,尝试配置或操作多路径设备。
STEP 3
步骤3
攻击者触发特定条件,导致`scsi_dh_attached_handler_name`函数调用失败(例如模拟内存不足)。
STEP 4
步骤4
由于漏洞存在,内核错误处理流程未释放路径设备的引用计数,导致内存资源泄漏。
STEP 5
步骤5
攻击者反复执行此操作,耗尽系统内核内存,导致系统拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual PoC for CVE-2026-43192 * This code simulates the logic flow causing the reference leak. * Real exploitation requires a configured dm-mpath environment. */ #include <stdio.h> #include <stdlib.h> // Simulating kernel structures struct dm_dev { int ref_count; char name[32]; }; // Simulated kernel functions void dm_get_device(struct dm_dev *dev) { dev->ref_count++; printf("[+] dm_get_device called. Ref count: %d\n", dev->ref_count); } void dm_put_device(struct dm_dev *dev) { dev->ref_count--; printf("[-] dm_put_device called. Ref count: %d\n", dev->ref_count); } // Simulate scsi_dh_attached_handler_name returning -ENOMEM int scsi_dh_attached_handler_name() { printf("[!] scsi_dh_attached_handler_name failed (-ENOMEM)\n"); return -12; // -ENOMEM } // Vulnerable logic in parse_path void vulnerable_parse_path(struct dm_dev *path_dev) { dm_get_device(path_dev); // The vulnerable check: if this fails, cleanup is skipped if (scsi_dh_attached_handler_name() != 0) { // BUG: Missing dm_put_device(path_dev) here in the vulnerable version printf("[!] Error path taken, leaking device reference!\n"); return; } // Normal cleanup dm_put_device(path_dev); } int main() { struct dm_dev target = { .ref_count = 0, .name = "sda" }; printf("[*] Starting PoC for CVE-2026-43192\n"); printf("[*] Initial ref_count: %d\n", target.ref_count); // Trigger the vulnerability logic vulnerable_parse_path(&target); printf("[*] Final ref_count: %d\n", target.ref_count); if (target.ref_count > 0) { printf("[SUCCESS] Resource leaked! Reference count is non-zero.\n"); } else { printf("[FAIL] No resource leak detected.\n"); } return 0; }

影响范围

Linux Kernel < commit 4aa5c37b7d8019f7296111c1add00e7214baae60
Linux Kernel < commit 787bd63ee661b0148ce8e1fde92b7afddd85c446

防御指南

临时缓解措施
建议尽快升级内核。若无法立即升级,应严格限制本地用户对多路径设备配置的权限,并监控系统内存使用情况以检测异常泄漏。

参考链接

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