SpringCloud Function中CVE-2022-22963 SpEL注入漏洞如何深入剖析?

2026-05-19 19:561阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1042个文字,预计阅读时间需要5分钟。

SpringCloud Function中CVE-2022-22963 SpEL注入漏洞如何深入剖析?

SpringCloud Function SpEL 注入 + 漏洞分析 + SpringCloud Function 介绍SpringCloud 是一套分布式系统的解决方案,常见的还有 Dubbo、Fass(Function As A Service)。底层实现函数式编程,直观易懂。

SpringCloud Function中CVE-2022-22963 SpEL注入漏洞如何深入剖析?

SpringCloud Function SpEL注入 漏洞分析 SpringCloud Function 介绍

SpringCloud 是一套分布式系统的解决方案,常见的还有阿里巴巴的Dubbo,Fass(Function As A Service )的底层实现就是函数式编程,在视频转码、音视频转换、数据仓库ETL等与状态相关度低的领域运用的比较多。开发者无需关注服务器环境运维等问题上,专注于自身业务逻辑实现即可。

SpringCloud Function 就是Spring提供的分布式函数式编程组件。

漏洞环境搭建

通过idea新建一个Spring项目,pom中引入spring-boot-starter-webspring-cloud-function-web,如下:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="maven.apache.org/POM/4.0.0" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="maven.apache.org/POM/4.0.0 maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>SpringCloudDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringCloudDemo</name> <description>SpringCloudDemo</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>2021.0.1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-function-web</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>

其中spring-cloud-function-web的依赖如上图,核心实现为spring-cloud-function-core包。

先在main函数中新建两个方法(uppercase将字符串变为大写,reverse字符串反转):

当在pom中引入spring-cloud-function-web后,函数会自动添加为HTTP端点。

然后漏洞关键是在application.properties 或者yaml配置文件中新增一行:

spring.cloud.function.definition=functionRouter

这里的属性spring.cloud.function.definition 表示声明式函数组合,这个功能允许在提供属性时使用|(管道),;(过滤)分隔符以声明的方式提供组合指令。例如

--spring.cloud.function.definition=uppercase|reverse

举例:

当配置该属性为uppercase时,访问根路径提交的参数会自动被uppercase函数接受转化为大写:

反之若配置为reverse则默认路径函数功能为反转字符串:

通俗来讲这个属性就是一个默认路由, 可以手动指定相关函数,也可以使用functionRouter ,指定的方式可以是配置文件、环境变量或者启动参数等

functionRouter

如果设置为functionRouter则默认路由绑定的具体函数交由用户进行控制,在 Spring Cloud Function Web里面,可以通过设置github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f)

和其他SpEL注入修复方式一样,使用了SimpleEvaluationContext替换StandardEvaluationContext,那这个漏洞基本就算修复完成了。但因为这个commit还没有纳入版本,所以目前springcloud Function3.0以上版本仍然暴露在风险之中。

引用
  • spring.io/projects/spring-cloud-function#overview
  • cloud.spring.io/spring-cloud-function/reference/html/spring-cloud-function.html#_function_catalog_and_flexible_function_signatures
  • github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f
  • itmyhome.com/spring/expressions.html
公众号

欢迎大家关注我的公众号,这里有干货满满的硬核安全知识,和我一起学起来吧!

本文共计1042个文字,预计阅读时间需要5分钟。

SpringCloud Function中CVE-2022-22963 SpEL注入漏洞如何深入剖析?

SpringCloud Function SpEL 注入 + 漏洞分析 + SpringCloud Function 介绍SpringCloud 是一套分布式系统的解决方案,常见的还有 Dubbo、Fass(Function As A Service)。底层实现函数式编程,直观易懂。

SpringCloud Function中CVE-2022-22963 SpEL注入漏洞如何深入剖析?

SpringCloud Function SpEL注入 漏洞分析 SpringCloud Function 介绍

SpringCloud 是一套分布式系统的解决方案,常见的还有阿里巴巴的Dubbo,Fass(Function As A Service )的底层实现就是函数式编程,在视频转码、音视频转换、数据仓库ETL等与状态相关度低的领域运用的比较多。开发者无需关注服务器环境运维等问题上,专注于自身业务逻辑实现即可。

SpringCloud Function 就是Spring提供的分布式函数式编程组件。

漏洞环境搭建

通过idea新建一个Spring项目,pom中引入spring-boot-starter-webspring-cloud-function-web,如下:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="maven.apache.org/POM/4.0.0" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="maven.apache.org/POM/4.0.0 maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>SpringCloudDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringCloudDemo</name> <description>SpringCloudDemo</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>2021.0.1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-function-web</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>

其中spring-cloud-function-web的依赖如上图,核心实现为spring-cloud-function-core包。

先在main函数中新建两个方法(uppercase将字符串变为大写,reverse字符串反转):

当在pom中引入spring-cloud-function-web后,函数会自动添加为HTTP端点。

然后漏洞关键是在application.properties 或者yaml配置文件中新增一行:

spring.cloud.function.definition=functionRouter

这里的属性spring.cloud.function.definition 表示声明式函数组合,这个功能允许在提供属性时使用|(管道),;(过滤)分隔符以声明的方式提供组合指令。例如

--spring.cloud.function.definition=uppercase|reverse

举例:

当配置该属性为uppercase时,访问根路径提交的参数会自动被uppercase函数接受转化为大写:

反之若配置为reverse则默认路径函数功能为反转字符串:

通俗来讲这个属性就是一个默认路由, 可以手动指定相关函数,也可以使用functionRouter ,指定的方式可以是配置文件、环境变量或者启动参数等

functionRouter

如果设置为functionRouter则默认路由绑定的具体函数交由用户进行控制,在 Spring Cloud Function Web里面,可以通过设置github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f)

和其他SpEL注入修复方式一样,使用了SimpleEvaluationContext替换StandardEvaluationContext,那这个漏洞基本就算修复完成了。但因为这个commit还没有纳入版本,所以目前springcloud Function3.0以上版本仍然暴露在风险之中。

引用
  • spring.io/projects/spring-cloud-function#overview
  • cloud.spring.io/spring-cloud-function/reference/html/spring-cloud-function.html#_function_catalog_and_flexible_function_signatures
  • github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f
  • itmyhome.com/spring/expressions.html
公众号

欢迎大家关注我的公众号,这里有干货满满的硬核安全知识,和我一起学起来吧!