疯了!Spring 再官宣惊天大漏洞..

Java技术栈

共 4388字,需浏览 9分钟

 ·

2022-04-01 21:12

点击关注公众号,Java干货及时送达5ac2e553a6fb5e0f8e8f1ca4b68c4949.webp

Spring 官宣高危漏洞

大家好,我是栈长。

前几天爆出来的 Spring 漏洞,刚修复完又来?

今天愚人节来了,这是和大家开玩笑吗?

不是的,我也是猝不及防!这个玩笑也开的太大了!!

你之前看到的这个漏洞已经是过去式了:

5345d25bdd95733886b4efb413a3fef0.webp

我以为是终点,没想到只是起点,现在 Spring 又官宣了最新的高危漏洞:

d9da4419388e3009ad7c54e56f40a4b7.webp

Early Announcement??这只是一个早期的公告?可能还有中期?后期?往下面继续看就知道了!

漏洞详情

d643cf56e35854c12441c1571ddc1ffb.webp
漏洞CVE-2022-22965
漏洞名称远程代码执行漏洞
严重级别高危
影响范围Spring Framework
- 5.3.0 ~ 5.3.17
- 5.2.0 ~ 5.2.19
- 老版本及其他不受支持的版本

麻了,麻了,这次是高危,必须引起重视啊!!

漏洞描述:

用户可以通过数据绑定的方式引发远程代码执行 (RCE) 攻击漏洞,触发的前提条件如下:

  • JDK 9+
  • Apache Tomcat(war 包部署形式)
  • Spring MVC/ Spring WebFlux 应用程序

使用 Spring Boot 开发一般都是打成 jar 包,默认内嵌 Tomcat 形式,这对使用 Docker/ 微服务这种应用特别合适,但也可以切换为 war 包部署,但很少使用,但也不是没有,比如说一般的传统项目,为了兼容老环境,或者运维统一维护 Tomcat 环境,可能也会使用 war 包部署。

所以,如果你使用的是默认的 Spring Boot 可执行 jar 包默认内嵌 Tomcat 部署,则不受影响,但由于这个漏洞的普遍性,可能还有其他方式进行利用。。难道这就是 Early Announcement 的含义?还来,真要搞疯了!

如果你想关注和学习最新、最主流的 Java 技术,可以持续关注公众号Java技术栈,公众号第一时间推送。

解决方案

Spring 用户升级到以下安全版本:

  • Spring 5.3.18+
  • Spring 5.2.20+

Spring Boot 用户升级到以下安全版本:

  • Spring Boot 2.6.6+
  • Spring Boot 2.5.12+

麻了麻了!又得升级??这 Spring Boot 2.6.5 刚发布没几天。。。可能由于这个漏洞太过于高危,没有办法,必须升级主版本应对,以免用户使用了带了漏洞的版本。

但是,如果不想升级框架主版本,也是可以的,毕竟很多应用不一定会兼容 Spring Boot 最新版本,比较 Spring Cloud 或者其他依赖的底层框架。

Spring Boot 用户可以使用以下方法临时解决:

package car.app;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.annotation.InitBinderDataBinderFactory;
import org.springframework.web.method.support.InvocableHandlerMethod;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.ServletRequestDataBinderFactory;


@SpringBootApplication
public class MyApp {

 public static void main(String[] args) {
  SpringApplication.run(CarApp.class, args);
 }

 @Bean
 public WebMvcRegistrations mvcRegistrations() {
  return new WebMvcRegistrations() {
   @Override
   public RequestMappingHandlerAdapter getRequestMappingHandlerAdapter() {
    return new ExtendedRequestMappingHandlerAdapter();
   }
  };
 }


 private static class ExtendedRequestMappingHandlerAdapter extends RequestMappingHandlerAdapter {
  @Override
  protected InitBinderDataBinderFactory createDataBinderFactory(List methods) {
   return new ServletRequestDataBinderFactory(methods, getWebBindingInitializer()) {
    @Override
    protected ServletRequestDataBinder createBinderInstance(
      Object target, String name, NativeWebRequest request) throws Exception {
     ServletRequestDataBinder binder = super.createBinderInstance(target, name, request);
     String[] fields = binder.getDisallowedFields();
     List fieldList = new ArrayList<>(fields != null ? Arrays.asList(fields) : Collections.emptyList());
     fieldList.addAll(Arrays.asList("class.*""Class.*""*.class.*""*.Class.*"));
     binder.setDisallowedFields(fieldList.toArray(new String[] {}));
     return binder;
    }
   };
  }
 }
}

如果没用过 Spring Boot,这份Spring Boot 学习笔记,这个太全了!分享给你学习下,没用 Spring Boot 可以从 @EnableWebMvc 注解直接切换为扩展 DelegatingWebMvcConfiguration ,然后重写其 createRequestMappingHandlerAdapter 方法,具体可以参考:

https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config-advanced-java

总结

总结下这次受影响的用户:

  • JDK 9+
  • Apache Tomcat(WAR 包部署形式)
  • Spring MVC/ Spring WebFlux 应用程序

这次的大漏洞虽然是高危的,国内可能影响面有限。影响的关键还是JDK 9+ 的用户,国外用 JDK 9+ 的比较多,JDK 11 和 JDK8 占据主要阵营,JDK 17+ 也在逐步发力替代 JDK 8。

据我了解,国内用 JDK 8 的比较多,JDK 9+ 应该只是少部分群体,如果你用的 JDK 8 及以下版本,那恭喜你,目前不受影响,否则尽快修复、升级保平安。

另外还有两点要澄清一下:

1)关于 Spring 弃用 SerializationUtils 工具类的动作大家不要误解,这个工具类在 Spring 框架中只有一种用法,并且不会暴露于外部输入,弃用动作与此漏洞无关。

2)对于在报告此漏洞之前发布的  Spring Cloud Function 的漏洞 存在一些猜疑,这也和本漏洞无关。

最后,希望这次真的是终点了。。

参考文档:

  • https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement

  • https://tanzu.vmware.com/security/cve-2022-22965

最后,我也会继续关注和分享最新 Spring 漏洞进展,如果你想关注和学习最新、最主流的 Java 技术,可以持续关注公众号Java技术栈,公众号第一时间推送。

版权声明: 本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究其法律责任的权利。

e2cd8a63b35008dd27214c45824fa5a4.webp





d737e014a076a59e6ebbf436622f7485.webp


突发!Spring 也沦陷了。。。2021 年发生的 10 件技术大事!!
23 种设计模式实战(很全)
Spring Boot 保护敏感配置的 4 种方法!再见单身狗!Java 创建对象的 6 种方式阿里为什么推荐使用 LongAdder?AnotherRedisDesktopManager 开始收费了?别再写爆爆爆炸类了,试试装饰器模式!Java 18 发布,默认 UTF-8,finalize 被弃用。
Spring Boot 3.0 M1 发布,正式弃用 Java 8Spring Boot 学习笔记,这个太全了!



关注Java技术栈看更多干货



4caa08ffaf34cbcc32aa8ba7c4ac3689.webp获取 Spring Boot 实战笔记!
浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报