13

Spring Cloud Function SpEL 表达式注入

 1 year ago
source link: https://paper.seebug.org/1959/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者:VLab扫地僧@墨云科技VLab Team
原文链接:https://mp.weixin.qq.com/s/MiKWnGuyXTTLQVKjq2E_Gw

漏洞概述

Spring Cloud Function 是基于Spring Boot 的函数计算框架(FaaS),该项目提供了一个通用的模型,用于在各种平台上部署基于函数的软件,包括像 Amazon AWS Lambda 这样的 FaaS(函数即服务,function as a service)平台。它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。

在版本3.0.0到当前最新版本3.2.2(commit dc5128b),默认配置下,都存在Spring Cloud Function SpEL表达式注入漏洞。

漏洞复现

在IDEA中选择新建项目,然后选择Spring Initializr,输入随机项目名称,然后选择java版本和jdk版本后点击下一步。

图片

选择Spring WebFunction作为依赖项,点击完成。

图片

漏洞环境就搭建完成。因当前官方还未发布新版本,所以最新版本3.2.2也是存在漏洞的,若在官方出新版本后想要复现此漏洞,那么需要修改pom中spring-cloud-function-web的版本为3.2.2,如下图所示:

图片

确认项目中的spring-cloud-function-web是存在漏洞版本后,就可以直接启动项目了,无需进行任何修改。

图片

然后对本地8080端口发送payload即可。

图片

漏洞分析

先看git提交记录,https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f ,在提交描述中,明确指出修复了RoutingFunction SpEL代码注入漏洞,并且可以看到目前只更新了两个文件,其中一个文件仅为单元测试。

图片

在测试用例中也清楚写明了漏洞位置以及相关测试Payload。

图片

通过测试用例可知,在给Spring Cloud Function的web服务发送包的时候,加一个相关的Header信息,然后附上SpEL表达式即可执行命令。

图片

在文件org.springframework.cloud.function.context.config.RoutingFunction中,请求进入到apply方法,接着调用了route方法,然后通过判断特定的消息头信息是否为空,如果不为空则调用functionFromExpression方法。

图片
图片

因调用到了SpEL对routingExpression进行解析,从而导致了SpEL表达式注入。

图片

整个逻辑中由于完全信任从最开始传入的header信息,并且在解析SpEL表达式时候的evalContext使用的是功能更强同时安全隐患较大的StandardEcalutionContext

图片

在官方最新的修补文件中,可以看到新增了headerEvalContext对象,该对象所对应的是使用了仅支持最基本功能的SimpleEvaluationContext

图片

且在调用functionFromExpression方法的时候新增了一个isViaHead布尔类型的参数,用来判断该值是否是取自消息的header中,如果是则使用headerEvalContext对象来解析SpEL表达式。

图片

修复建议

建议您在升级前做好数据备份工作,避免出现意外。目前SpringCloud Function官方已针对此漏洞进行修复,但还没有发布正式版本,可拉取最新修复代码重新编译打包进行临时修补。

官方已发布修复补丁参考地址:https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1959/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK