0x01 影响版本
V3.0.0.M3 - V3.2.2
0x02 漏洞分析
使用该环境进行测试:
https://github.com/jwwam/scfunc -依赖版本改成3.2.2查看修复的记录
https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f
看到设置了一个isViaHeader,通过它的值来选择是使用
SimpleEvaluationContext还是
StandardEvaluationContext来构造上下文
SimpleEvaluationContext通常被作为修复spel注入的方法
确定了漏洞sink点后,向上寻找找到四处调用的地方,且均在
org.springframework.cloud.function.context.config.RoutingFunction#route中
其中有一处是可控的调用点
将header头为
spring.cloud.function.routing-expression的值当作spel表达式来解析
那么我们可以看看如何能执行到此处代码,接着寻找调用route的
org.springframework.cloud.function.context.config.RoutingFunction#apply 方法,到这里向上寻找调用点就变得很多了,回过头来看一下测试代码的例子