您的位置:首页 >聚焦 >

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

2022-04-01 21:53:35    来源:程序员客栈

点击关注公众号,Java干货及时送达

Spring 官宣高危漏洞

大家好,我是栈长。

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

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

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

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

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

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

漏洞详情
漏洞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;@SpringBootApplicationpublic 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技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究其法律责任的权利。

突发!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技术栈看更多干货

获取 Spring Boot 实战笔记!

关键词: 持续关注 第一时间 应用程序

相关阅读