Spring Cloud Gateway代码执行漏洞


远程代码执行(Remote Code Execute)漏洞\命令注入(SpEL Code Injection)漏洞

  • SpEL表达式语言
    能够在运行时动态赋值,且可使用Java类和方法。T(类的全路径)即可使用Java类

Spring Cloud Gateway

spring boot的网关组件,为微服务架构提供一种简单有效的统一的 API 路由管理方式

API网关是一个服务器,是系统的唯一入口。所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。

  • Filter(过滤器): 是GatewayFilter的一个实例,过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容
  • Predicate(断言):路由转发的判断条件,使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数
  • Route(路由):网关配置的基本组成模块。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问
  • 处理流程
    客户端向Spring Cloud Gateway发出请求。然后在Gateway Handler Mapping中找到与请求相匹配的路由,将其发送到Gateway Web Handler。Handler通过指定的过滤器链将请求发送到服务并执行业务逻辑,然后返回。过滤器可能会在发送代理请求之前或之后执行业务逻辑。

Spring Boot Actuator

spring boot的监控组件,提供安全端点,用于监视和管理Spring Boot应用程序

Spring Boot Actuator端点

端点用法
/env查看应用程序中使用的环境变量列表
/info查看有关Spring Boot应用程序的信息
/beans查看Spring bean及其类型,范围和依赖关系
/health查看应用程序运行状况
/trace查看Rest端点的跟踪列表
/metrics查看应用程序指标

Gateway和Actuator集成

/gateway执行器端允许监视Spring Cloud Gateway应用程序并与之交互。要进行远程访问,必须在应用程序属性中通过HTTP或JMX启用和公开端

management.endpoint.gateway.enabled=true
management.endpoints.web.exposure.include=gateway

Actuator操作Gateway接口列表

http://host:port/actuator/gateway/id

id描述
globalfiltersGET方法,返回全局Filter列表
routefiltersGET方法,每个路由的filter
routesGET方法,路由列表
routes/{路由}GET方法,指定路由的信息
routes/{路由}POST方法,创建路由
refreshPOST方法,刷新路由缓存
routes/{路由}DELETE方法,删除路由

漏洞复现

启动Spring Cloud Gateway本地服务
在这里插入图片描述
服务端口配置为9000
在这里插入图片描述
访问成功,服务已启动
在这里插入图片描述
使用bp创建路由并添加恶意过滤器规则
在这里插入图片描述
响应成功创建
在这里插入图片描述
刷新路由缓存使其生效
在这里插入图片描述
浏览器查看刚才创建的路由信息,Result的值成功执行了whoami命令
在这里插入图片描述
删除路由后刷新路由清除缓存
在这里插入图片描述

也可使用Python自动化脚本执行任意命令
在这里插入图片描述

payload分析

#{new String(
T(org.springframework.util.StreamUtils).copyToByteArray(
T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"})
.getInputStream()))}
  • new String[]{“whoami”}
    创建字符串,内容为要执行的命令
  • T(java.lang.Runtime).getRuntime().exec()
    Java中执行操作系统命令
  • .getInputStream()
    获得执行结果
  • T(org.springframework.util.StreamUtils).copyToByteArray()
    spring工具类的方法将执行结果转换为字节数组
  • new String()
    将结果转换为字符串
  • #{
    SpEL表达式的必要格式,利用SpEL表达式特性执行恶意代码

漏洞发生条件

  • Spring Cloud Gateway < 3.1.1
  • Spring Cloud Gateway < 3.0.7
  • Spring Cloud Gateway集成了Actuator

漏洞修复

  1. 更新升级Spring Cloud Gateway到安全版本
  2. 在不考虑影响业务的情况下禁用Actuator端点
    management.endpoint.gateway.enable: false
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值