漏洞信息

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框架开发。
2.如果业务系统项目以jar包形式直接独立运行,按照如下步骤进行判断。
  • 解压jar包:将jar文件的后缀修改成.zip,解压zip文件。
  • 在解压缩目录下搜索是否存在spring-beans-.jar 格式的jar文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了spring框架进行开发。
  • (3如果spring-beans-.jar 文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业务系统使用了spring框架进行开发。
3.在完成以上两个步骤排查后,同时满足以下两个条件可确定受此漏洞影响:
  • 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 所在的包中添加).完成类添加后,需对项目进行重新编译打包和功能验证测试。并重新发布项目。
  1. import org.springframework.core.annotation.Order;
  2. import org.springframework.web.bind.WebDataBinder;
  3. import org.springframework.web.bind.annotation.ControllerAdvice;
  4. import org.springframework.web.bind.annotation.InitBinder;
  5. @ControllerAdvice
  6. @Order(10000)
  7. public class a{
  8. @InitBinder
  9. public void setAllowedFields(WebDataBinder dataBinder) {
  10. String[] abd = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};
  11. dataBinder.setDisallowedFields(abd);
  12. }
  13. }

漏洞修复

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