【漏洞通告】Spring Framework远程代码执行漏洞(CVE-2022-22965)

发布时间 2022-03-31

0x00 漏洞概述

CVE   ID

CVE-2022-22965

时    间

2022-03-31

类    型

RCE

等    级

严重

远程利用

影响范围


攻击复杂度

用户交互

PoC/EXP

已公开

在野利用


 

0x01 漏洞详情

Spring Framework 是一个开源的轻量级J2EE应用程序开发框架。

3月31日,VMware发布安全公告,修复了Spring Framework中的远程代码执行漏洞(CVE-2022-22965)。在 JDK 9 及以上版本环境下,可以利用此漏洞在未授权的情况下在目标系统上写入恶意程序从而远程执行任意代码。

该漏洞影响了在JDK 9+上运行的Spring框架或其衍生框架构建的网站或应用,目前官方已在Spring Framework 5.3.18+和5.2.20+中修复了此漏洞。鉴于此漏洞的PoC/EXP已公开,建议相关用户尽快排查修复。

 

影响范围

运行环境为JDK9及以上版本的:

Spring Framework 5.3.0 -5.3.17

Spring Framework 5.2.0 - 5.2.19

以及其它旧版的、不受支持的版本。


0x02 安全建议

通用修复

目前官方已经修复了此漏洞,受影响用户可以升级更新到Spring Framework 5.3.18或5.2.20。

下载链接:

https://github.com/spring-projects/spring-framework/tags

 

漏洞排查

当同时满足以下条件时,表明可能受此漏洞影响:

l  JDK版本 >= 9;

l  使用Spring框架或衍生框架,当前使用了Tomcat中间件(目前公开的漏洞利用代码只针对Tomcat中间件,但不排除存在其它风险)。

 

排查方法

l  JDK版本号排查

执行“java -version"命令查看JDK版本,如果版本号小于等于8,则不受此漏洞影响。

l  Spring框架使用情况排査

1.如果业务系统项目以war包形式部署,按照如下的步骤进行判断:

解压war包:将war文件的后级修改成 .zip文件;

在解压缩目录下搜索是否存在spring-beans-*.jar格式的文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了 Spring框架进行开发;

如果spring-beans-*.jar文件不存在,则在解压缩目录下搜索CachedlntrospectionResults.class文件是否存在,如存在则说明业务系统使用了 Spring框架进行开发。

2. 如果业务系统项目以jar包形式独立运行,按照如下的步骤进行判断:

解压jar包:将jar文件的后缀修改成zip,解压zip 文件;

在解压缩目录下搜索是否存在spring-beans-*.jar格式的jar文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了 Spring框架进行开发;

如果spring-beans-*.jar文件不存在,则在解压缩目录下搜索CachedIntrospectionResults.class文件是否存在,如果存在则说明业务系统使用了 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 GlobalControllerAdvicc{

@InitBinder

public void setAllowedFields(webdataBinder dataBinder){

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

}

}

 

0x03 参考链接

https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement

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

https://github.com/spring-projects/spring-framework/

 

0x04 版本信息

版本

日期

修改内容

V1.0

2022-03-31

首次发布

 

0x05 附录

公司简介

启明星辰公司成立于1996年,并于2010年6月23日在深交所中小板正式挂牌上市,是国内极具实力的、拥有完全自主知识产权的网络安全产品、可信安全管理平台、安全服务与解决方案的综合提供商。

公司总部位于北京市中关村软件园,在全国各省、市、自治区设有分支机构,拥有覆盖全国的渠道体系和技术支持中心,并在北京、上海、成都、广州、长沙、杭州等多地设有研发中心。

多年来,启明星辰致力于提供具有国际竞争力的自主创新的安全产品和最佳实践服务,帮助客户全面提升其IT基础设施的安全性和生产效能,为打造和提升国际化的民族信息安全产业领军品牌而不懈努力。


关于我们

启明星辰安全应急响应中心主要针对重要安全漏洞的预警、跟踪和分享全球最新的威胁情报和安全报告。

关注以下公众号,获取全球最新安全资讯:

image.png