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

CVE-2026-23357 Linux内核mcp251x驱动死锁漏洞

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

漏洞信息

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

相关标签

Linux Kernel拒绝服务死锁DoSCAN驱动本地权限

漏洞概述

Linux内核中的mcp251x CAN驱动程序存在安全漏洞。在mcp251x_open函数的错误处理路径中,代码在持有互斥锁的情况下调用free_irq释放中断。若此时中断已触发,处理程序将等待该锁,导致free_irq与中断处理程序互相等待,引发死锁,进而影响系统可用性。

技术细节

该漏洞源于Linux内核drivers/net/can/spi/mcp251x.c文件中的锁机制设计缺陷。在mcp251x_open函数执行过程中,如果发生错误,代码会进入错误处理路径。此时,mpc_lock互斥锁处于锁定状态。随后调用的free_irq()函数试图注销中断处理程序,但必须等待当前正在运行的中断处理程序结束。然而,如果在调用free_irq之前中断已经发生,中断处理程序(mcp251x_irq)在执行时会尝试获取mpc_lock。这就形成了典型的ABBA死锁:主线程持有锁并等待中断结束,中断处理程序等待锁被释放。结果是内核线程挂起,导致拒绝服务。

攻击链分析

STEP 1
步骤1
攻击者获取本地低权限访问权限。
STEP 2
步骤2
攻击者尝试打开使用mcp251x驱动的CAN网络接口设备。
STEP 3
步骤3
在设备打开过程中,通过特定操作触发初始化错误路径。
STEP 4
步骤4
确保在错误处理执行时,硬件中断恰好触发(可能需要竞争条件)。
STEP 5
步骤5
系统触发死锁,相关内核进程挂起,导致拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual Proof of Concept for CVE-2026-23357 * Triggering the deadlock requires specific hardware timing. * This is a simplified representation of the logic flow. */ #include <linux/module.h> #include <linux/netdevice.h> // Hypothetical trigger function void trigger_deadlock_scenario(struct net_device *net) { // 1. Attempt to open the device (mcp251x_open) // Internally, this acquires mpc_lock. // 2. Simulate an error condition during open // This leads to the error path where free_irq is called // while holding mpc_lock. // 3. Simultaneously, an interrupt occurs (hardware dependent) // The IRQ handler tries to acquire mpc_lock. // Result: Deadlock. } /* * Fix Check: Verify that free_irq is called after mutex_unlock. */

影响范围

Linux Kernel (多个稳定分支,具体见参考链接)

防御指南

临时缓解措施
禁用mcp251x驱动模块或限制非特权用户对CAN设备的访问权限,直到内核升级完成。

参考链接

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