漏洞信息
2022年3月29日晚间,我方获悉Spring曝出RCE 0day的相关漏洞,并第一时间予以确认并做出评估。 该漏洞的影响范为在Spring框架的JDK9及以上版本,远程攻击者可在满足特定条件的基础上,通过框架的参数绑定功能获取class对象,而后利用对象构造利用链,例如可修改tomcat的日志配置以写入shell。由于spring框架作为目前java开发环境中备受欢迎的开源框架,该漏洞对于业务的危害性高,影响范围广。应急方案
2022年3月30日,此时官方还暂未发布此漏洞的相关补丁。我方就漏洞详情向客户发出了漏洞预警通知,并在通知中提供了以下排查方式和临时修复措施:排查方法
JDK影响版本范围:
执行“java -version”命令查看运行的JDK版本,如果版本号小于等于8,则不受漏洞影响。Spring框架使用情况
1.如果业务系统项目以war包形式部署,按照如下步骤进行判断。- 解压war包:将war文件的后缀修改成.zip ,解压zip文件
- 在解压缩目录下搜索是否存在 spring-beans-.jar 格式的jar文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了spring框架进行开发。
- 如果spring-beans-.jar 文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业务系统使用了Spring框架开发。
- 解压jar包:将jar文件的后缀修改成.zip,解压zip文件。
- 在解压缩目录下搜索是否存在spring-beans-.jar 格式的jar文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了spring框架进行开发。
- (3如果spring-beans-.jar 文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业务系统使用了spring框架进行开发。
- JDK版本号在9及以上的;
- 使用了spring框架或衍生框架。
临时修复措施
WAF防护
通过阿里云WAF,根据实际部署业务的流量情况,设置自定义规则以实现对<font style="color:rgb(0, 0, 0);">"class.""Class."".class."".Class."</font>
等字符串的过滤,并在部暑过滤规则后,对业务运行情况进行测试,避免产生额外影响。
临时修复措施
同时按进行漏洞的临时修复:- 在应用中全局搜索@InitBinder注解,看看方法体内是否调用dataBinder.setDisallowedFields方法,如果发现此代码片段的引入,则在原来的黑名单中,添加
<font style="color:rgb(0, 0, 0);">{"class.","Class. ",". class.", ".Class."}</font>
。(注:如果此代码片段使用较多,需要每个地方都追加) - 在应用系统的项目包下新建以下全局类,并保证这个类被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);
}
}
漏洞修复
2022年3月31日,Spring官方和阿里云均已发出公告正式披露此漏洞(CVE-2022-22965),并推出了修复方法: 由于该漏洞主要影响在JDK 9+上运行的Spring MVC和Spring WebFlux应用程序。受影响的用户可以通过以下方法规避该漏洞风险:Spring 5.3.x用户升级到5.3.18+、Spring 5.2.x用户升级到5.2.20+、Spring Boot 2.6.x用户升级到2.6.6+、Spring Boot 2.5.x用户升级到2.5.12+。 详情可查看Spring社区和阿里云社区的官方说明:https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
https://help.aliyun.com/noticelist/articleid/1061022382.html