『Java CVE』CVE-2022-22963: Spring Cloud Function SPEL表达式注入RCE

本文详细介绍了Spring Cloud Function中的一个安全漏洞,该漏洞允许通过SPEL表达式触发远程代码执行(RCE)。影响范围为3.0.0到3.2.2版本。通过向/functionRouter发送特定POST请求,攻击者可以利用此漏洞。补丁修复主要涉及在处理请求时增加安全性检查,防止未经验证的headers内容。同时,文章提供了复现漏洞的步骤、代码审计过程、POP链以及自动检测脚本,并给出了官方修复的代码对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞简介

/functionRouter路由发送headers带有spring.cloud.function.routing-expression键的POST包时,会触发SPEL解析该键值

影响范围

3.0.0 <= Spring Cloud Function <= 3.2.2

漏洞复现

官方已提供参考PoC

在这里插入图片描述

新建Spring Cloud Function项目

在这里插入图片描述

修改pom为受影响版本

在这里插入图片描述

启动默认Application即可,然后向/functionRouter路由发送恶意包即可

在这里插入图片描述

代码审计

从POST请求传入开始,在org.springframework.cloud.function.web.mvc.FunctionController

Content-Type是x-www-form-urlencoded,因此在form方法设置断点

在这里插入图片描述

进入processRequest处理请求

在这里插入图片描述

processRequest方法获取了post请求的headers和正文,整合成Message对象传入doApply方法

在这里插入图片描述

判断请求如果是RoutingFunction则调用RoutingFunction.apply方法

在这里插入图片描述

最后来到RoutingFunction.route方法,默认function是null,获取headersspring.cloud.function.routing-expression的值,传入functionFromExpression方法

在这里插入图片描述

首先获取了SPEL表达式,也就是headersspring.cloud.function.routing-expression的值,然后传入getValue方法

在这里插入图片描述

然后抽象语法树ast解析SPEL表达式

在这里插入图片描述
最后在ReflectiveMethodExecutor.class调用反射完成RCE
在这里插入图片描述

POP链

在这里插入图片描述

补丁修复分析

漏洞在于未对headers的内容进行检测,完全信任headers

在V3.2.3中:functionFromExpress内部调用getValve方法解析SPEL时,使用的是headerEvalContext而不是evalContext

在这里插入图片描述

新增加的SimpleEvaluationContext

在这里插入图片描述

SimpleEvaluationContext类相比StandardEvaluationContext类,确保了仅提供安全的操作

自动检测脚本

https://github.com/chaosec2021/Spring-cloud-function-SpEL-RCE

参考

https://tanzu.vmware.com/security/cve-2022-22963

https://github.com/spring-cloud/spring-cloud-function/compare/v3.2.2…v3.2.3#diff-01d5affef57305a3034bfb48185f34ae3d21f15e7f389851ac67035f7bd0dc7a

https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f

欢迎关注我的CSDN博客 :@Ho1aAs
版权属于:Ho1aAs
本文链接:https://ho1aas.blog.csdn.net/article/details/126037840
版权声明:本文为原创,转载时须注明出处及本声明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值