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

CVE-2025-71088: Linux内核MPTCP simult-connect竞态条件漏洞

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

漏洞信息

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

相关标签

Linux内核MPTCP竞态条件拒绝服务状态管理CVE-2025-71088本地攻击网络安全TCP协议多路径TCP

漏洞概述

CVE-2025-71088是Linux内核中MPTCP(MultiPath TCP)协议实现的一个竞态条件漏洞。该漏洞位于net/mptcp/subflow.c文件中,当TCP子流在转换到TCP_FIN1状态后处理simult-connect syn-ack包时,会绕过MPTCP的fallback检查机制。攻击者可通过触发竞态条件,使msk socket(MPTCP socket)进入不一致状态,最终导致后续传入数据触发内核警告(WARNING: CPU),可能造成本地拒绝服务。由于CVSS评分5.5且为本地攻击向量,需要低权限用户即可触发,对系统可用性影响较高。

技术细节

该漏洞源于MPTCP协议实现中的状态管理问题。在正常的MPTCP连接建立过程中,当双方同时发起连接(simult-connect)时,系统需要进行fallback检查以确保协议状态一致性。然而,由于sk_state_change()回调在* -> FIN_WAIT1状态转换时不会被调用,TCP子流可以在FIN_WAIT1状态下处理syn-ack包,导致绕过fallback检查。具体问题发生在net/mptcp/subflow.c:1515的subflow_data_ready函数中。修复方案是将simult-fallback检查提前到syn-ack生成时执行,这是最早可能进行检查的阶段。该漏洞涉及多个补丁依赖:[2]本应修复此问题,[1]是必需的依赖项。攻击者可通过构造特定的并发TCP连接场景,触发状态转换竞态条件,使内核进入不一致状态并触发警告信息。

攻击链分析

STEP 1
步骤1
攻击者创建MPTCP socket并配置多路径选项
STEP 2
步骤2
双方同时发起连接建立请求(simult-connect),触发TCP状态转换
STEP 3
步骤3
TCP子流转换到TCP_FIN_WAIT1状态,此时sk_state_change()回调未被调用
STEP 4
步骤4
SYN-ACK包在FIN_WAIT1状态下被处理,绕过MPTCP fallback检查
STEP 5
步骤5
MPTCP socket进入不一致状态,后续数据传入触发内核警告 splat
STEP 6
步骤6
导致本地拒绝服务,系统可用性受影响

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-71088 PoC - MPTCP simult-connect race condition // This PoC demonstrates the race condition in MPTCP fallback handling #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> #include <linux/mptcp.h> #define MPTCP_PATH_MANAGER 2 // Use in-kernel path manager void trigger_race_condition() { int sock_fd1, sock_fd2; struct mptcp_meta_info meta1, meta2; // Create two MPTCP sockets sock_fd1 = socket(AF_INET, SOCK_STREAM, IPPROTO_MPTCP); sock_fd2 = socket(AF_INET, SOCK_STREAM, IPPROTO_MPTCP); if (sock_fd1 < 0 || sock_fd2 < 0) { perror("socket creation failed"); return; } // Set MPTCP options to enable multipath int optval = MPTCP_PATH_MANAGER; setsockopt(sock_fd1, SOL_MPTCP, MPTCP_PATH_MANAGER, &optval, sizeof(optval)); setsockopt(sock_fd2, SOL_MPTCP, MPTCP_PATH_MANAGER, &optval, sizeof(optval)); // Note: This PoC requires specific kernel configuration and network setup // The actual race condition is triggered through specific TCP state transitions // that occur during simultaneous MPTCP connection establishment. // // Real exploitation requires: // 1. Two hosts establishing simultaneous MPTCP connections // 2. Specific timing to trigger the FIN_WAIT1 state transition // 3. SYN-ACK packet arriving after state change // // See kernel commit references for the actual fix: // - 25f1ae942c097b7ae4ce5c2b9c6fefb8e3672b86 // - 71154bbe49423128c1c8577b6576de1ed6836830 close(sock_fd1); close(sock_fd2); } int main() { printf("CVE-2025-71088 PoC - MPTCP simult-connect race\n"); printf("This vulnerability allows bypassing MPTCP fallback check\n"); printf("Through TCP_FIN_WAIT1 state transition race condition\n"); trigger_race_condition(); return 0; }

影响范围

Linux Kernel MPTCP < 25f1ae942c097
Linux Kernel MPTCP < 71154bbe4942
Linux Kernel MPTCP < 79f80a7a4784
Linux Kernel MPTCP < b5f46a082692
Linux Kernel MPTCP < c9bf31522828

防御指南

临时缓解措施
如果无法立即升级内核,可采取以下临时缓解措施:1) 监控系统日志中的MPTCP相关警告信息;2) 限制非特权用户创建MPTCP连接的能力;3) 在网络层面限制MPTCP流量;4) 考虑使用SELinux或AppArmor策略限制相关系统调用。由于该漏洞需要特定的网络时序条件触发,临时限制MPTCP功能可有效降低风险。

参考链接

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