【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

渗透技巧 2年前 (2022) admin
1,012 0 0

关注公众号回复“漏洞”获取研究环境

漏洞信息

 

Spring Cloud Function是基于SpringBoot的函数计算框架,它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。

 

近日Spring Cloud Function Github发布了一个漏洞更新信息GH-835:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

从描述来看,这是一个SPEL表达式注入漏洞,影响版本为`3.x<=v3.2.2`。

环境搭建

 

利用idea新建一个SpringBoot项目(JDK17),在`pom.xml`中引入Spring Cloud Function依赖项:

 

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-function-context --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-function-context</artifactId>    <version>3.2.2</version></dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-function-webflux --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-function-webflux</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-function-dependencies --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-function-dependencies</artifactId>    <version>3.2.2</version>    <type>pom</type></dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-function-web --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-function-web</artifactId>    <version>3.2.2</version></dependency>
补丁对比

 

修改主要位于`RoutingFunction`类:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

类中新定义`SimpleEvaluationContext`对象`headerEvalContext`,函数`functionFromExpression`增加了一个bool类型参数`isViaHeader`,当`isViaHeader`为`True`时,将用`SimpleEvaluationContext`代替`StandardEvaluationContext`,从而修复了SPEL表达式注入漏洞。

 

`RoutingFunction`继承于`Function`:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

查看官方文档:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

为了能够顺利进入`RoutingFunction`,在SpringBoot项目的`application.properties`中添加配置:

 

spring.cloud.function.definition:functionRouter
漏洞分析

 

全文搜索`RoutingFunction`,排除全部Test对象,定位`FunctionWebRequestProcessingHelper`:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

进入`FunctionWebRequestProcessingHelper.processRequest`:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

搜索`FunctionWebRequestProcessingHelper.processRequest`调用情况,发现在`FunctionController`接口处理POST请求时存在调用关系:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

借助idea actuator的mapping功能查看Controller:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

构造如下测试请求:

 

POST /test HTTP/1.1Host: 127.0.0.1:8080User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Content-Length: 4
test

 

触发断点:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

往下走:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

当`function`为`RoutingFunction`类型时,`function.apply`将进入`RoutingFunction#apply`:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

进入`route`函数:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

尝试从Header中提取`spring.cloud.function.routing-expression`,然后调用`functionFromExpression`函数。修改请求:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

进入`functionFromExpression`函数:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

触发SPEL表达式解析。

漏洞复现

 

换成SPEL表达式漏洞payload,触发RCE:

 

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

 

 

由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。

 

 

点关注,不迷路!

【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

关注公众号回复“漏洞”获取研究环境

原文始发于微信公众号(且听安全):【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现

版权声明:admin 发表于 2022年3月27日 上午1:12。
转载请注明:【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...