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
漏洞排查
当同时满足以下条件时,表明可能受此漏洞影响:
lJDK版本 >= 9;
l使用Spring框架或衍生框架,当前使用了Tomcat中间件(目前公开的漏洞利用代码只针对Tomcat中间件,但不排除存在其它风险)。
排查方法
lJDK版本号排查
执行“java -version"命令查看JDK版本,如果版本号小于等于8,则不受此漏洞影响。
lSpring框架使用情况排査
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/