Spring Framework远程代码执行漏洞

 漏洞资讯     |      2022-04-01

一、  漏洞描述

Spring官方发布安全公告,披露了一个Spring框架可在JDK>=9版本下实现远程代码执行的漏洞(CVE-2022-22965)。

二、  漏洞详情

CVE-2022-22965: Spring Framework远程代码执行漏洞

CVE: CVE-2022-22965

组件: Spring Framework

漏洞类型: 代码问题

影响: 远程代码执行

简述: 见漏洞描述。

三、  影响版本


影响产品或系统版本

安全版本

Spring Framework

JDK>=9版本下的Spring Framework

spring-framework v5.3.18

spring-framework v5.2.20.RELEASE

四、  安全版本

见三

五、  安全建议

漏洞自查:

可按照以下步骤来判断是否受此漏洞影响:

1.排查是否使用了Spring框架(包括但不限于以下方法)

(1)排查项目中是否使用了Spring框架:

可遍历项目文件查找是否包含spring-beans-*.jar

(2)排查war包中是否存在Spring框架:

检查war包内是否存在spring-beans-*.jar文件,若存在则表示使用spring开发框架;若不存在,则进一步确认是否存在CachedIntrospectionResults.class文件,若存在则表示使用Spring开发框架或衍生框架。

(3)排查jar包部中的Spring:

检查Jar包内是否存在spring-beans-*.jar文件,若存在则表示使用Spring开发框架;若不存在,则进一步确认是否存在CachedIntrospectionResults.class文件,若存在则表示使用Spring开发框架或衍生框架。

2.排查包含Spring框架的项目使用的JDK版本,如果JDK版本>=9则存在风险。

漏洞处置:

目前Spring官方已发布安全补丁,建议及时更新Spring至官方最新安全版本来修复此漏洞。

临时缓解措施:

1.全局搜索@InitBinder注解,判断方法体内是否有dataBinder.setDisallowedFields方法,如果有使用则在原来的黑名单中添加:

{"class.*","Class.*","*.class.*","*.Class.*"}

(注:如果此代码片段使用较多,需要每个地方都追加)

2.在应用系统的项目包下新建以下全局类,并保证这个类被Spring加载到(推荐在Controller所在的包中添加)。完成类添加后,需对项目进行重新编译打包和功能验证测试。并重新发布项目。

import org.springframework.core.annotation.Order;

import org.springframework.web.bind.WebDataBinder;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.InitBinder;

@ControllerAdvice

@Order(10000)

public class GlobalControllerAdvice{

@InitBinder

public void setAllowedFields(webdataBinder dataBinder){

String[]abd=new string[]{"class.*","Class.*","*.class.*","*.Class.*"};

dataBinder.setDisallowedFields(abd);}

}