×

页面升级中敬请期待

> 首页 > 关于优炫 > 公司动态 > 公司新闻 >

公司新闻

Company News

优炫软件安全研究院:Spring RCE 0day 高危漏洞通告

2022-03-31 01:26:38

2022-03-31 01:26:38

 

漏洞描述
 

 

优炫软件安全研究院监测到Spring 框架曝出 RCE 0day 漏洞。经研究,已经证实由于 SerializationUtils#deserialize 基于 Java 的序列化机制,可导致远程代码执行 (RCE),使用 JDK9 及以上版本皆有可能受到影响。考虑到 Spring 框架的广泛应用,漏洞利用整个过程操作简单, 该漏洞可能已被远程攻击者利用。

 

 

漏洞影响力分析
 

 

 
漏洞利用方式 

用户认证不需要用户认证 

触发方式远程 

配置方式默认 

 
漏洞利用条件

 

1、使用 JDK9 及以上版本的 Spring MVC 框架。 

2、Spring 框架以及衍生的框架 spring-beans-*.jar 文件或者存在

CachedIntrospectionResults.class。 

 

 
综合评价

 

利用难度:低,无需授权即可远程代码执行 

威胁等级:严重,能造成远程代码执行 

 

漏洞时间线
 

2022-3-30

优炫软件安全研究院监测到 Spring RCE 0day 漏洞并发布安全动态 

 

2022-3-30

优炫软件安全研究院发布安全公告 

 

影响版本
 

 

组件 

影响版本 

安全版本 

Spring MVC 

JDK >=9 

JDK<=8

 

可能的受影响应用包括但不限于如下: 

⚫ Spring 框架及其衍生框架 

 

人工检测
 

 

JDK 版本号排查。

 

在业务系统的运行服务器上,执行“java -version”命令查看运行的 JDK 版本,如果版本号小于等于 8,则不受漏洞影响。 

 

Spring 框架使用情况排查。

 

1、如果业务系统项目以 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 框架开发。

 

 2、如果业务系统项目以 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 框架进行开发。 

 

修复建议
 

 

 
优炫下一代防火墙防护 

优炫下一代防火墙具有防御网络攻击的能力,提供基于身份识别的全面安全防护,以抵御存在的复杂的混合型威胁。在优炫下一代防火墙设备上,根据实际部署业务的流量情况,实现对{ "class.*","Class. *","*. class.*", "*.Class.*"} 等字符串的规则过滤,并在部署过滤规则后,对业务运行情况进行测试,避免产生额外影响。

 

 
临时修复措施

目前,spring 官方无官方补丁,建议采用以下二个临时方案进行防护,并及时关注官方补丁发布情况,按官方补丁修复漏洞。 

 

需同时按以下两个步骤进行漏洞的临时修复: 

 

1、在应用中全局搜索@InitBinder 注解,看看方法体内是否调用dataBinder.setDisallowedFields 方法,如果发现此代码片段的引入,则在原来的黑名单中,添加{"class.*”,"C1ass.*","米.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 a{

 

@InitBinder

public void setAllowedFields(WebDataBinder dataBinder) {

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

dataBinder.setDisallowedFields(abd);

}

 

}