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

admin 2022年3月27日13:40:45评论157 views字数 2638阅读8分47秒阅读模式

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

漏洞信息


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表达式注入漏洞分析与复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月27日13:40:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【最新漏洞预警】Spring Cloud Function SPEL表达式注入漏洞分析与复现http://cn-sec.com/archives/843499.html

发表评论

匿名网友 填写信息