漏洞复现----43、Spring Cloud Function SpEL 代码注入 (CVE-2022-22963)


CVE-2022-22963

漏洞成因

Spring Cloud Function 是Spring cloud中的serverless框架。SimpleEvaluationContext进行SPEL解析,当spring.cloud.function.definition=functionRouter配置开启时,会触发RoutingFunction逻辑,在Spring Cloud Function 中的RoutingFunction类的 apply方法将请求头中的spring.cloud.function.routing-expression参数作为SpELl 表达式进行处理,造成SpEL表达式注入漏洞。攻击者可通过该漏洞执行任意代码。

functionRouter
如果设置为functionRouter则默认路由绑定的具体函数交由用户进行控制,在 Spring Cloud Function Web里面,可以通过设置http头的方式来控制,使用spring.cloud.function.definition 和spring.cloud.function.routing-expression 都可以,区别是后者允许使用SpEL。

影响版本

漏洞组件:
org.springframework.cloud:spring-cloud-function-context
漏洞版本:
3.0.0.RELEASE~3.2.2

代码分析

SpringCloud Function之所以能自动将函数建立http端点,是因为在包mvc.FunctionController中使用/** 监听了get/post类型的所有端点:
/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/mvc/FunctionController.java
在这里插入图片描述

当一个请求进入时,程序首先基于Springboot的自动配置,将配置文件注入到functionProperties,随后将以WebRequestConstants.handler为key,function为值添加到request数组里面:
/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/mvc/FunctionHandlerMapping.java

在这里插入图片描述
在这里插入图片描述请求正式进入Controller节点,Controller首先会将请求使用wrapper进行包装,wrapper就是将request转成FunctionInvocationWrapper格式:
/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/mvc/FunctionController.java

在这里插入图片描述随后进入processRequest对request进行处理,执行function的apply方法,跳转到doApply()时会对function进行判断,判断是不是functionRouter方法,根据配置文件此时的function为RoutingFunction.FUNCTION_NAME ==functionRouter所以会,一路跳转到RoutingFunction.route

/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/RoutingFunction.java
在这里插入图片描述

/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/RoutingFunction.java

在这里插入图片描述

随后进入else if 分支, http头spring.cloud.function.routing-expression 不为空,则传入其值到functionFromExpression方法。
/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/RoutingFunction.java
在这里插入图片描述使用标准的StandardEvaluationContext对header的值进行SpEL表达式解析
在这里插入图片描述
在这里插入图片描述

漏洞复现

在这里插入图片描述

在这里插入图片描述


参考链接:
https://mp.weixin.qq.com/s/onYJWIESgLaWS64lCgsKdw
https://www.cnblogs.com/9eek/p/16113603.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李沉肩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值