freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Spring Cloud GateWay 远程代码执行漏洞(CVE-2022-22947)
2022-03-31 14:49:33
所属地 北京

一:漏洞简介

Spring Cloud Gateway存在远程代码执行漏洞,该漏洞是发生在Spring Cloud Gateway应用程序的Actuator端点,其在启用、公开和不安全的情况下容易受到代码注入的攻击。攻击者可利用该漏洞通过恶意创建允许在远程主机上执行任意远程请求。

二:影响版本

Spring Cloud GateWay 3.1.0

Spring Cloud GateWay >=3.0.0,<=3.0.6

Spring Cloud GateWay <3.0.0

三:漏洞复现

使用P牛的vulhub环境进行复现(https://github.com/vulhub/vulhub/tree/master/spring/CVE-2022-22947)

先POST请求创建route和filter

image

然后POST请求/refresh,使新建的uri和filter生效

image

然后GET请求/actuator/gateway/routes/test,触发spel,并得到回显

image

四:漏洞分析

  1. 首先我们去找到spring-cloud-gateway的commit记录,看看修改了哪些地方:https://github.com/spring-cloud/spring-cloud-gateway/commit/337cef276bfd8c59fb421bfe7377a9e19c68fe1e

  2. 我们可以看到commit中改动了org.springframework.cloud.gateway.support.ShortcutConfigurable#getValue方法(我们知道spel表达式执行会经常使用该方法)中用GatewayEvaluationContext替换了StandardEvaluationContext来执行spel表达式。

  3. image

  4. 所以盲猜一波是spel表达式的rce

  5. 然后我们搜索getValue方法的调用位置如下:

  6. image

  7. 我们点进去发现三个调用都位于org.springframework.cloud.gateway.support.ShortcutConfigurable内的枚举类ShortcutType中,并且都重写了normalize方法

  8. image

  9. image

  10. image

  11. 然后我们继续向上查找normalize方法都被谁调用

  12. image

  13. 我们发现最终都来到org.springframework.cloud.gateway.support.ConfigurationService.ConfigurableBuilder#normalizeProperties方法中,我们看一下normalizeProperties方法:

  14. image

  15. 可以看到normalizeProperties方法中传入的是该类(ConfigurableBuilder)的properties变量,并且只有在该类的父类(AbstractBuilder)中的bind方法中才调用了normalizeProperties方法

  16. image

  17. 然后我们继续向上查看哪些调用了bind方法

  18. image

  19. 我们逐一排查后发现org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#loadGatewayFilters方法中既调用了bind方法,还调用了properties方法,跟进properties方法发现该方法就是我们上边说到的org.springframework.cloud.gateway.support.ConfigurationService.ConfigurableBuilder#normalizeProperties方法中刚好需要的properties成员变量,由此我们可以猜到该漏洞的触发条件可能来自于gatewayFilter的添加,并且从loadGatewayFilters方法继续向上的调用链如下:


org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#loadGatewayFilters
org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters
org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#convertToRoute
org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getRoutes
  1. 所以最后就是在添加filter时输入了spel表达式,被当作properties进行解析,最终导致恶意表达式被执行,从而实现rce。

个人Github地址:https://github.com/Artio-Li/

五:参考链接

https://y4er.com/post/cve-2022-22947-springcloud-gateway-spel-rce-echo-response/

https://www.cnblogs.com/bitterz/p/15964852.html

https://github.com/spring-cloud/spring-cloud-gateway/commit/337cef276bfd8c59fb421bfe7377a9e19c68fe1e

# 网络安全 # web安全 # 漏洞分析 # java # Spring
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录