之前3.0.0.RELEASE <= spring cloud function <=3.2.2 之间的版本存在SPEL注入漏洞,目前官方已经发布了3.2.3版本修复了这个漏洞。
Spring Coud Function 官方在最新版本3.2.3 已经修复了之前的commit为dc5128b 的SPEL注入漏洞,具体代码改动
可以看到重载了functionFromExpression方法,通过判断isViaHeader 执行不同的处理过程,如果为真,就用SimpleEvaluationContext处理,否则才用StandardEvaluationContext 处理。
在取Header头中的spring.cloud.function.routing-expression是调用了functionFromExpression(StringroutingExpression, Objectinput, booleanisViaHeader),但是从配置文件中取这个字段的时候还是调用的functionFromExpression(StringroutingExpression, Objectinput)这个方法就是造成SPEL解析命令执行漏洞的关键。
因此理论上只要能够控制functionProperties.getRoutingExpression() 的值应该也能够触发这个漏洞。
进一步看到functionProperties类中的getRoutingExpression()方法
到这里就非常清晰了,因此只要在配置文件中添加
spring.cloud.function.definition=functionRouter
spring.cloud.function.routingExpression=T(java.lang.Runtime).getRuntime().exec("calc")
本次还是用Spring-Cloud-Function SPEL 注入漏洞的一点想法 中的环境,需要将
spring-cloud-starter-function-web 版本改成最新3.2.3版本
访问不存在的路径就可以触发
访问存在的路径反而无法执行命令
原文始发于微信公众号(风藤安全):spring cloud function 最新3.2.3 版本 trick
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论