

CVE-2022-22963 SpringCloud Function SpEL 注入漏洞分析
source link: https://paper.seebug.org/1977/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者:xxhzz@星阑科技PortalLab
原文链接:https://mp.weixin.qq.com/s/3DECgzKcovoCQcdZLGXCzA
前言
在研究分析了CVE-2022-22980 Spring Data MongoDB SpEL表达式注入漏洞之后,想起之前在spring4shell爆出之前,存在于SpringCloud Function中的一个SpEL表达式注入漏洞,编号为CVE-2022-22963。在这里对其进行一波分析和学习。
漏洞描述
Spring Cloud Function 是基于 Spring Boot 的函数计算框架。该项目致力于促进函数为主的开发单元,它抽象出所有传输细节和基础架构,并提供一个通用的模型,用于在各种平台上部署基于函数的软件。在Spring Cloud Function 相关版本,存在SpEL表达式注入。恶意攻击者无需认证可通过构造特定的 HTTP 请求头注入 SpEL 表达式,最终执行任意命令,获取服务器权限。
利用范围
3.0.0 <= Spring Cloud Function <= 3.2.2
漏洞分析
环境搭建
使用idea新建Spring Cloud Function项目。

pom.xml中引入spring-boot-starter-web、spring-cloud-function-web

在application.properties中添加spring.cloud.function.definition=functionRouter

这里设置端口为8090,默认为8080

运行之后,环境搭建完成。
前置知识
SpringCloud Function 相关介绍
简单的介绍,Spring Cloud 是一系列框架的集合, 内部包含了许多框架,这些框架互相协作,共同来构建分布式系统。利用这些组件,可以非常方便地构建一个分布式系统。SpringCloudFunction就是一个SpringBoot开发的Servless中间件(FAAS)。

在环境搭建时,我们在application.properties中添加spring.cloud.function.definition=functionRouter
这里的属性spring.cloud.function.definition 表示声明式函数组合,简单理解就是一个默认路由。具体可参考如下说明。
functionRouter
我们设置spring.cloud.function.definition=functionRouter就是使默认路由绑定具体函数交由用户进行控制。

在spring-cloud-function-web中可以通过设置Message Headers来传达路由指令,也可以路通过spring.cloud.function.definition 或spring.cloud.function.routing-expression作为应用程序属性进行通信,允许使用 Spring 表达式语言 (SpEL)。
这就是产生SpEL注入的关键所在。
动态分析
在理解了前置知识中相关原理,其实也就能大概知晓漏洞原理。
查看DIFF(https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f) 记录。

看到从请求头中获取的 spring.cloud.function.routing-expression 之前是由StandardEvaluationContext 解析,修复新增了 isViaHeader 变量做了一个判断,如果是从请求头中获取的 spring.cloud.function.routing-expression 值,使用 SimpleEvaluationContext 解析。
在spring.cloud.function.context.catalog.simpleFunctionRegistry#doApply中。

在执行function apply方法之后,会跳转到doApply中,对funtion进行判断,判断是不是functionRouter方法。
后续跟进,进入spring.cloud.function.context.config.Routingfunction#route

进入else if 分支, http头spring.cloud.function.routing-expression 不为空,则传入其值到functionFromExpression方法。
随后对传入的header进行解析处理。

后续跟进发现对Spel表达式进行解析的方法就是StandardEvaluationContext

后续跟进,在解析传入的Spel之后,成功触发恶意代码。

漏洞复现

修复建议
受影响的组件更新至3.1.7、3.2.3安全版本。
参考材料
3.https://spring.io.zh.xy2401.com/projects/spring-cloud-function/#overview
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1977/
Recommend
-
19
Wordpress4.2.3提权与SQL注入漏洞(CVE-2015-5623)分析 腾讯安全中...
-
10
PfSense命令注入漏洞分析 mssp299 ·
-
12
Joomla CMS 3.2-3.4.4 SQL注入 漏洞分析 RickGray
-
21
漏洞简述 Dropbear是一个相对较小的SSH服务器和客户端。开源,在无线路由器等嵌入式linux系统中使用较多。 X11是一个用于图形显示的协议,用于满足在命令行使用的情况下对图形界面的需求。开启X11服务,需要在ssh配置中...
-
15
Flask简介 Flask 是一个 web 框架。也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序。这个 wdb 应用程序可以使一...
-
4
Author: p0wd3r (知道创宇404安全实验室) 0x00 漏洞概述 1.漏洞简介 SugarCRM(http://www.sugarcrm.com/ )是一套开源的客户关系管理系统。近期研究者发现在其<=6.5.23的版本中存在反序列化漏洞,程序对攻击者恶...
-
8
Joomla!3.7.0 Core com_fields组件SQL注入漏洞分析 Posted on Jun 05, 2017 By yaof
-
7
SpringCloud 是Spring提供的微服务实现框架,其中包含网关、配置中心和注册中心等内容,网关的第一代实现为zuul,第二代实现为Gateway,提供了更好的性能和特性。 网关可以提供统一的流量控制和访问控制等功能,一般放在客户端请求的入口或作为nginx的直接上...
-
2
作者:HuanGMz@知道创宇404实验室 时间:2022年6月7日 分析一下最近Microsoft Office 相关的 MSDT 漏洞。 1. WTP 框架 文档:
-
7
Spring Cloud Function SpEL注入漏洞(CVE-2022-22963)分析 2023-12-08 09:00:00 云计算 本文将重点分析Spring Cloud漏洞,有关Spring...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK