一、背景
spring是一个开源的,轻量级控制反转和面向切面的容器框架,解决企业应用开发的复杂性,降低耦合,更易于测试。作为目前全球最受欢迎的Java轻量级开源框架,Spring允许开发人员专注于业务逻辑,简化Java企业级应用的开发周期。
3月29日,Spring框架曝出RCE 0day漏洞。已经证实由于 SerializationUtils#deserialize 基于 Java 的序列化机制,可导致远程代码执行 (RCE),使用JDK9及以上版本皆有可能受到影响。
二、漏洞利用条件
影响版本:
-
Spring Framework < 5.3.18
-
Spring Framework < 5.2.20
-
其他衍生框架、版本
利用条件:
- JDK9+
- Spring 框架以及衍生的框架存在spring-beans-*.jar 文件或者存在CachedIntrospectionResults.class
- 使用tomcat启动
三、漏洞POC
已有POC流出,请关注。
四、防御策略
1.waf增加防护规则:
class\s*\.\s*module\s*\.\s*classLoader.*=.*(jsp|exec|runtime|java|sun|spring|forname)
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);
}
}
3.补丁修复
目前官方已给出修复补丁,请升级版本至5.2.20.RELEASE或5.3.18。
五、漏洞靶场
读者可以选择Spring Framework 远程命令执行漏洞靶场试玩。