SpringCloudFunction漏洞分析

admin 2022年3月27日13:28:40评论88 views字数 1113阅读3分42秒阅读模式

前言

SpringCloudFunction是一个SpringBoot开发的Servless中间件(FAAS),支持基于SpEL的函数式动态路由。在特定配置下,3 <= 版本 <= 3.2.2( commit dc5128b 之前)存在SpEL表达式执行导致的RCE。


补丁分析

main 分支commit dc5128b(https://github.com/spring-cloud/spring-cloud-function/commit/dc5128b80c6c04232a081458f637c81a64fa9b52)中,新增了 SimpleEvaluationContext

SpringCloudFunction漏洞分析

isViaHeader 变量作为flag,在解析前判断 spring.cloud.function.routing-expression 的值是不是取自 HTTP头,如果是的话就用 SimpleEvaluationContext 解析SpEL语句,不是来自外部输入时(比如System.setProperty )才用StandardEvaluationContext 解析。

SpringCloudFunction漏洞分析

同样的,官方测试用例已经清楚地写明了漏洞位置与Payload:

SpringCloudFunction漏洞分析

提取出测试类后在apply方法下断并跟入,省略一些中间流程,最终可以看到从HTTP头spring.cloud.function.routing-expression 中取出SpEL表达式并由 StandardEvaluationContext 解析:

SpringCloudFunction漏洞分析

至此source与sink已经清晰,虽然测试用例可以模拟触发漏洞,但还是要搭出一套能实际复现的环境。刚开始 时想不开,自己在那啃文档碎碎写了一两个小时demo硬是搭不起来,后来发现官方提供的sample(https://github.com/spring-cloud/spring-cloud-function/tree/main/spring-cloud-function-samples/function-sample-pojo)就很好用 Orz:

SpringCloudFunction漏洞分析


后话

好消息是只有Spring Cloud Function部分版本特定配置的动态路由才会受影响(spring.cloud.function.definition=functionRouter),坏消息是SpEL表达式存在 charset、replace等多种变形。


参考链接

Function Routing and Filtering


SpringCloudFunction漏洞分析
SpringCloudFunction漏洞分析

默安科技安全研究院旗下团队,“逐日”寓意为追逐技术永不停歇,专注于安全攻防研究,包括漏洞挖掘、逆向工程、红蓝对抗、代码审计、产品赋能等方向。


原文始发于微信公众号(默安逐日实验室):SpringCloudFunction漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月27日13:28:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SpringCloudFunction漏洞分析https://cn-sec.com/archives/843105.html

发表评论

匿名网友 填写信息