Spring 官方修复零日漏洞,推出 Spring Boot 2.6.6、2.5.12 等新版本

标签: spring 官方 漏洞 | 发表时间:2022-04-02 15:48 | 作者:来源: 投稿
出处:https://www.oschina.net/news/project

一、漏洞说明

这个漏洞还要从 3 月 29 日晚间说起。

彼时有不少网友爆料,Spring 框架出现“史诗级” RCE 漏洞,平地一声雷,一时之间,快要入睡的开发者们纷纷坐起查看关于漏洞的情况,闹得技术圈中人心惶惶。

不过有些不同寻常的是,这个漏洞并没有像 Log4j2 事件那样引起圈内诸多企业大厂的紧急行动,甚至连国外披露漏洞的根源也是来自 QQ 和国内部分网络安全网站。

Spring 官方证实:框架爆大漏洞,JDK 9 及以上版本均受影响

这也让不少网友猜测,该漏洞应该是国内某个安全机构、安全人员最先发现的。

果不其然,据 3 月 31 日国家信息安全漏洞共享平台(CNVD)发布的《 关于Spring框架存在远程命令执行漏洞的安全公告》显示,这群神秘的白帽子们包括蚂蚁科技集团、奇安信科技、杭州安恒信息技术、安天科技、360、北京天融信,当然这些都是后话了。

1.1 Spring 零日漏洞真的存在

就在开发者越来越焦灼时,Spring.io 官方于 3 月 31 日晚间出面证实了这一漏洞的存在,并带来了解决方案。

Spring 官方证实:框架爆大漏洞,JDK 9 及以上版本均受影响

根据公告,我们发现这个漏洞的影响远比我们想象的更为严重,如果满足以下几种门槛,极有可能受漏洞影响:

  • JDK 9 或更高版本

  • Apache Tomcat 作为 Servlet 容器

  • 打包为传统的 WAR(与 Spring Boot 可执行 jar 相比)

  • spring-webmvc 或 spring-webflux 依赖

  • Spring Framework 版本 5.3.0 到 5.3.17、5.2.0 到 5.2.19 以及更早的版本

二、官方更新

2.1 初步解决方案

当前 Spring.io 已经发布了 Spring Framework 5.3.185.2.20 版本,同时还带来了最新的依赖于 Spring Framework 5.3.18 的 Spring Boot 2.6.6 2.5.12 。因为如果你能升级到 Spring Framework 5.3.18 和 5.2.20,就不用以下的修复方案了。

如果不可以,Spring 官方建议通过 @ControllerAdvice 来设置 WebDataBinder 的 disallowedFields。

   @ControllerAdvice   @Order(Ordered.LOWEST_PRECEDENCE)   public class BinderControllerAdvice {    @InitBinder    public void setAllowedFields(WebDataBinder dataBinder) {    String denylist = new String{"class.*", "Class.*", "*.class.*", "*.Class.*"};    dataBinder.setDisallowedFields(denylist);    }   }

这个解决方案通常会有效,但也并不是 100% 可以阻止漏洞。因此为了更加保险一些,Spring.io 还建议应用程序可以扩展
RequestMappingHandlerAdapter,同时在所有其他初始化之后,在最后更新WebDataBinder。为了实现这一点,Spring Boot 应用程序可以声明一个 WebMvcRegistrations(Spring MVC)或 WebFluxRegistrations bean(Spring WebFlux)。

在Spring MVC中(在WebFlux中也类似)示例如下:

   package vip.mate.demo;

   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;

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

@SpringBootApplication
   public class MyApp {
       public static void main(String[] args) {
        SpringApplication.   run(MyApp.   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<InvocableHandlerMethod> 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<String> 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 MVC,应用程序可以从 @EnableWebMvc 切换到直接扩展
DelegatingWebMvcConfiguration,如这个文档中(https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config-advanced-java)高级配置部分所述,然后重写 createRequestMappingHandlerAdapter 方法。

基于以上,我们建议受漏洞影响的产品(服务)厂商和信息系统运营者第一时间进行自查,并及时升级至最新版本。

 

 

相关 [spring 官方 漏洞] 推荐:

Spring 官方修复零日漏洞,推出 Spring Boot 2.6.6、2.5.12 等新版本

- - 开源中国-软件更新资讯
这个漏洞还要从 3 月 29 日晚间说起. 彼时有不少网友爆料,Spring 框架出现“史诗级” RCE 漏洞,平地一声雷,一时之间,快要入睡的开发者们纷纷坐起查看关于漏洞的情况,闹得技术圈中人心惶惶. 不过有些不同寻常的是,这个漏洞并没有像 Log4j2 事件那样引起圈内诸多企业大厂的紧急行动,甚至连国外披露漏洞的根源也是来自 QQ 和国内部分网络安全网站.

Log4j2史诗级漏洞来袭,影响Spring Boot应用,请自查!

- - 程序猿DD
Apache Log4j 2是一款优秀的Java日志框架. 该工具重写了Log4j框架,并且引入了大量丰富的特性. 该日志框架被大量用于业务系统开发,用来记录日志信息. 由于Apache Log4j 2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞. 漏洞利用无需特殊配置,攻击者可直接构造恶意请求,触发远程代码执行漏洞.

Spring官宣承认网传大漏洞,并提供解决方案

- - 程序猿DD
然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹. 所以,昨天发了一篇关于最近 网传的Spring大漏洞的文章,聊了聊这些让人迷惑的营销文、以及提醒大家不要去下载一些利用漏洞提供补丁的钓鱼内容. 而对于这个网传的漏洞,依然保持关注状态,因为确实可能存在,只是没有官宣. 就在不久前(3月31日晚),Spring社区发布了一篇名为 《Spring Framework RCE, Early Announcement》的文章,官宣了最近网传的Spring漏洞.

老版本的Spring应用该如何应对CVE-2022-22965漏洞?

- - 掘金 后端
昨天,在发布了 《Spring官宣承认网传大漏洞,并提供解决方案》之后. 群里就有几个小伙伴问了这样的问题:**我们的Spring版本比较老,该怎么办. **这是一个好问题,所以DD今天单独拿出来说说. 这次的RCE漏洞宣布之后,官方给出的主要解决方案是升级版本,但只有Spring 5.2、5.3和Spring Boot 2.5、2.6提供了对应的升级版本.

Spring 官方域名变更并且网站改版

- - 开源中国社区最新新闻
以前的域名:http://springsource.org/,直接跳转为:http://spring.io/. Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的 移植版本. 该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由 Rod Johnson 和 Juergen Hoeller等开发.

Struts2官方再曝两枚高危漏洞(目前暂无POC)

- - FreeBuf.COM | 关注黑客与极客
Struts2前段时间才爆出了 s2-032的高危漏洞,当时导致全球使用Struts2架构的网站几乎无一幸免于这场安全灾难. 但就在6月1日,这个全球儿童欢乐的节日,Struts官网再次公布了一个安全威胁公告——公告中说明Struts2又曝出了两枚漏洞,编号s2-033和s2-034. 在使用REST插件并开启动态方法调用时,可导致远程代码执行.

Google发布Chrome官方扩展DOM Snitch 可发现网页代码漏洞

- 小老虎 - cnBeta.COM
Google今天发布了一个名为DOM Snitch的Chrome官方扩展,它可以让开发者和安全人士在浏览网站时自动识别出不安全的代码,这种扩展的灵感其实是来自于5周之前一家安全公司Mind Security在Firefox上的作品DOMinator,使用这种工具用户可以轻易发现例如XSS、数据泄漏等问题,并指出问题所在的代码段,帮助用户规避以及厂商发现后修补.

OpenSSL受到多个漏洞影响,官方呼吁尽快升级

- - FreeBuf.COM
还记得OpenSSL 心脏滴血漏洞么. 几周前,这一漏洞的披露曾震惊互联网,全球有上百万使用OpenSSL对通信进行加密的网站受到该漏洞的影响. 无独有偶,OpenSSL基金会最近又发布了一些更新,修复了六个OpenSSL中的安全漏洞,其中两个为严重级别. ‍‍‍‍‍‍ 中间人攻击(CVE-2014-0224)‍‍‍‍‍‍‍‍.

Spring详解

- - CSDN博客架构设计推荐文章
Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目的是简化企业开发.. PersonDaoBean 是在应用内部创建及维护的. 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.

Spring定时

- - 行业应用 - ITeye博客
spring的定时任务配置分为三个步骤:. . . . . .