Spring是一个开源框架,轻量级的Java开发框架,Spring的核心是控制反转(IoC)和面向切面(AOP)。
漏洞公开状态:未公开 ;漏洞利用 poc :小范围公开
漏洞满足条件:java JDK 版本 9或9以上的版本+业务使用spring框架或衍生框架。
漏洞排查方法:检查JDK版本,在运行Spring框架的业务服务器上执行
java -version
Spring框架使用排查:
官方语言:
一、如果业务系统项目以war包形式部署,按照如下步骤进行判断:
1.解压war包:将war文件的后缀修改成.zip ,解压zip文件;2. 在解压缩目录下搜索是否存在 spring-beans-*.jar 格式的jar文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了spring框架进行开发;3.如果spring-beans-*.jar 文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业务系统使用了Spring框架开发。
二、如果业务系统项目以jar包形式直接独立运行,按照如下步骤进行判断:1. 解压jar包:将jar文件的后缀修改成.zip,解压zip文件;2. 在解压缩目录下搜索是否存在spring-beans-*.jar 格式的jar文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了spring框架进行开发;3.如果spring-beans-*.jar 文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业务系统使用了spring框架进行开发。
漏洞防护临时建议:
Spring已发布修复补丁
参考链接:https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement(1)可在网络安全设备WAF上添加过滤特殊字符,实现流量过滤拦截,需要测试需要影响业务。
“class.*”,“Class.*”,“*.class.*”,“*.Class.*”
(2)在Spring上添加黑名单:
在应用中全局搜索@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); } }