观天

漏洞通报:Spring Framework RCE远程代码执行 0day漏洞

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);
   }
}
赞(16)
未经允许不得转载:观天 » 漏洞通报:Spring Framework RCE远程代码执行 0day漏洞