Chinaunix首页 | 论坛 | 博客
  • 博客访问: 603768
  • 博文数量: 298
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3077
  • 用 户 组: 普通用户
  • 注册时间: 2019-06-17 10:57
文章分类

全部博文(298)

文章存档

2022年(96)

2021年(201)

2019年(1)

我的朋友

分类: Java

2022-04-11 13:58:34


点击(此处)折叠或打开


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

  2. 漏洞    CVE-2022-22965
  3. 漏洞名称    远程代码执行漏洞
  4. 严重级别    高危
  5. 影响范围    Spring Framework
  6. - 5.3.0 ~ 5.3.17
  7. - 5.2.0 ~ 5.2.19
  8. - 老版本及其他不受支持的版本
  9. 这次是高危,必须引起重视

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

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

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

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

  17. 解决方案
  18. Spring 用户升级到以下安全版本:

  19. Spring 5.3.18+
  20. Spring 5.2.20+
  21. Spring Boot 用户升级到以下安全版本:

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

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

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

  27. package car.app;

  28. import java.util.ArrayList;
  29. import java.util.Arrays;
  30. import java.util.List;

  31. import org.springframework.boot.SpringApplication;
  32. import org.springframework.boot.autoconfigure.SpringBootApplication;
  33. import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
  34. import org.springframework.context.annotation.Bean;
  35. import org.springframework.web.bind.ServletRequestDataBinder;
  36. import org.springframework.web.context.request.NativeWebRequest;
  37. import org.springframework.web.method.annotation.InitBinderDataBinderFactory;
  38. import org.springframework.web.method.support.InvocableHandlerMethod;
  39. import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
  40. import org.springframework.web.servlet.mvc.method.annotation.ServletRequestDataBinderFactory;

  41. /**
  42.  * 说明:MyApp
  43.  * 作者:FH Admin
  44.  * from:fhadmin.cn
  45.  */
  46. @SpringBootApplication
  47. public class MyApp {

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

  51.     @Bean
  52.     public WebMvcRegistrations mvcRegistrations() {
  53.         return new WebMvcRegistrations() {
  54.             @Override
  55.             public RequestMappingHandlerAdapter getRequestMappingHandlerAdapter() {
  56.                 return new ExtendedRequestMappingHandlerAdapter();
  57.             }
  58.         };
  59.     }


  60.     private static class ExtendedRequestMappingHandlerAdapter extends RequestMappingHandlerAdapter {
  61.         @Override
  62.         protected InitBinderDataBinderFactory createDataBinderFactory(List<InvocableHandlerMethod> methods) {
  63.             return new ServletRequestDataBinderFactory(methods, getWebBindingInitializer()) {
  64.                 @Override
  65.                 protected ServletRequestDataBinder createBinderInstance(
  66.                         Object target, String name, NativeWebRequest request) throws Exception {
  67.                     ServletRequestDataBinder binder = super.createBinderInstance(target, name, request);
  68.                     String[] fields = binder.getDisallowedFields();
  69.                     List<String> fieldList = new ArrayList<>(fields != null ? Arrays.asList(fields) : Collections.emptyList());
  70.                     fieldList.addAll(Arrays.asList("class.*", "Class.*", "*.class.*", "*.Class.*"));
  71.                     binder.setDisallowedFields(fieldList.toArray(new String[] {}));
  72.                     return binder;
  73.                 }
  74.             };
  75.         }
  76.     }
  77. }

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

  80. JDK 9+
  81. Apache Tomcat(WAR 包部署形式)
  82. Spring MVC/ Spring WebFlux 应用程序
  83. 这次的大漏洞虽然是高危的,国内可能影响面有限。影响的关键还是JDK 9+ 的用户,国外用 JDK 9+ 的比较多,JDK 11 和 JDK8 占据主要阵营,JDK 17+ 也在逐步发力替代 JDK 8。

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


阅读(588) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~