您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

Spring官宣网传大漏洞,附解决方案

时间:2022-04-02 09:38:31  来源:  作者:码农看看

Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹。所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷惑的营销文、以及提醒大家不要去下载一些利用漏洞提供补丁的钓鱼内容。而对于这个网传的漏洞,依然保持关注状态,因为确实可能存在,只是没有官宣。

就在不久前(3月31日晚),Spring社区发布了一篇名为《Spring Framework RCE, Early Announcement》的文章,官宣了最近网传的Spring漏洞。证实了网传漏洞确实存在,并且并非最近很多文章说提到的3月28、29日公布的CVE,如果你是照着那些文章解决问题的话,请根据这次官宣内容重新来过吧。

这次确定的Spring核心框架中的RCE漏洞,CVE号为CVE-2022-22965。

Spring官宣网传大漏洞,附解决方案

 

这个漏洞是在周二深夜,由AntGroup FG的codePlutos,meizjm3i向VMware报告。周三,Spring官方对该问题进行了调查、分析并确定了解决方案,同时计划在周四进行紧急版本的发布

由于该漏洞被泄漏在网络上,所以Spring官方紧急发布了相关修复的版本,因为是Spring核心框架中的漏洞,所以涉及面较广。所以在这篇博文中也是在不断的持续更新进展,下面截止到本文发稿的进展时间线:

Spring官宣网传大漏洞,附解决方案

 

下面就来一起看看这个被网传了2天的神秘漏洞的官宣内容和解决方案。

影响范围

该漏洞的利用需要满足下面的条件:

  • JDK 9 +
  • 使用Apache Tomcat部署
  • 使用WAR方式打包
  • 依赖spring-webmvc或spring-webflux

虽然可能国内大部分用户还在用JDK 8、或者采用内置Tomcat的方式运行,但由于该漏洞的特性比较普遍,不排除其他利用方式的存在。所以,DD还是建议在有条件的情况下,尽快升到最新版本来避免可能存在的风险发生。

解决方案

因为这次不是网传,而是Spring官宣,所以解决方案已经相对完善和容易了,受影响的用户可以通过下面的方法解决该漏洞的风险:

  • 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+

对于该漏洞的复现及更多细节,因为篇幅有限,这里就不具体介绍了,感兴趣的小伙伴可以关注公众号程序猿DD,回复“CVE-2022-22965”,获取更深入的解析文档。

然后,这里需要特别再提一下,之前已经收到消息并有所行动的小伙伴,没猜错的话应该都是用下面的解决方案来处理的吧?

@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);
    }

}

这个方法DD在微信群里(点击加群)也看到蛮多次了。这次Spring官方推文里,证实了该方法是有效的,但可能会留下一些其他隐患,特别是当Controller通过其自己的@InitBinder方法在本地设置disalloedFields时,该方法会覆盖全局设置。

为了以更安全的方式应用解决方案,应用程序可以扩展RequestMAppingHandlerAdapter,以便在所有其他初始化结束后更新WebDataBinder。官方给出了更好的解决方案,比如下面这样:

@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<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,如文档的高级配置部分所述[3],然后重写createRequestMappingHandlerAdapter方法来实现。

参考资料

[1] https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement

[2] https://tanzu.vmware.com/security/cve-2022-22965

[3] https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config-advanced-JAVA



Tags:Spring   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹。所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷...【详细内容】
2022-04-02  Tags: Spring  点击:(0)  评论:(0)  加入收藏
环境:Springboot2.4.12R2DBC简介Spring data R2DBC是更大的Spring data 系列的一部分,它使得实现基于R2DBC的存储库变得容易。R2DBC代表反应式关系数据库连接,这是一种使用反应...【详细内容】
2022-03-28  Tags: Spring  点击:(11)  评论:(0)  加入收藏
在spring全家桶流行的当下,只要你做的是Java技术栈基本上95%以上都使用的spring或springboot框架,剩下的5%基本上是一些老项目,政府项目,银行项目之类对安全性要求比较高的项目,...【详细内容】
2022-03-24  Tags: Spring  点击:(11)  评论:(0)  加入收藏
SpringBoot 集成 MybatisPlus 系列SpringBoot 版本:2.6.4 MybatisPlus 版本:3.5.1 SpringBoot整合MybatisPlus SpringBoot整合MybatisPlus数据自动填充 SpringBoot整合Mybatis...【详细内容】
2022-03-18  Tags: Spring  点击:(16)  评论:(0)  加入收藏
本文内容 Spring 10种切点表达式详解 切点的组合使用 公共切点的定义声明切点@Poincut@Poincut 的使用格式如下:@Poincut("PCD") // 切点表达式 表示对哪些方法进行增强publi...【详细内容】
2022-03-18  Tags: Spring  点击:(17)  评论:(0)  加入收藏
一、概述微服务是目前较为热门的技术,Spring boot 是 Spring 的一套快速配置脚手架,可以基于Spring boot 快速开发单个微服务,微服务的特点决定了功能模块分布式部署,在不同的机...【详细内容】
2022-03-15  Tags: Spring  点击:(21)  评论:(0)  加入收藏
环境:Springboot2.3.12.RELEASE + Spring Cloud Hoxton.SR12 + RabbitMQ3.8.12简介Spring Cloud Stream是一个框架,用于构建与MQ连接的高度可伸缩的事件驱动微服务。其目的是...【详细内容】
2022-03-07  Tags: Spring  点击:(30)  评论:(0)  加入收藏
准备测试代码 一个测试接口public interface UserService { void doProcess(long userId);} 以及他的实现类@Servicepublic class DefaultUserService implements UserSe...【详细内容】
2022-03-03  Tags: Spring  点击:(23)  评论:(0)  加入收藏
使用Feign可以完成服务间调用,但是总存在一种情况:服务提供方没有注册到注册中心、服务提供方还没开发完成(因此也就无法调用)等等。此时如果我们需要完成服务之间调用该如何...【详细内容】
2022-03-03  Tags: Spring  点击:(27)  评论:(0)  加入收藏
1. 第一种import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springfram...【详细内容】
2022-03-02  Tags: Spring  点击:(29)  评论:(0)  加入收藏
▌简易百科推荐
Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹。所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷...【详细内容】
2022-04-02  码农看看    Tags:Spring   点击:(0)  评论:(0)  加入收藏
我们在开发过程中会遇到k8s api接口的调用,这个时候我们会先用postman来进行接口的调试工作,下面我们介绍如何在postman中实现k8s api接口的调试。1 rancher平台中选择API&KEY...【详细内容】
2022-03-30  80周辉    Tags:k8s   点击:(4)  评论:(0)  加入收藏
环境:Springboot2.4.12R2DBC简介Spring data R2DBC是更大的Spring data 系列的一部分,它使得实现基于R2DBC的存储库变得容易。R2DBC代表反应式关系数据库连接,这是一种使用反应...【详细内容】
2022-03-28  Spring全家桶实战案例    Tags:SpringBoot   点击:(11)  评论:(0)  加入收藏
引言Hello 大家好,这里是Anyin。在我们微服务开发过程中不可避免的会涉及到微服务之间的调用,例如:认证Auth服务需要去用户User服务获取用户信息。在Spring Cloud全家桶的背景...【详细内容】
2022-03-28  Anyin    Tags:OpenFeign   点击:(7)  评论:(0)  加入收藏
在spring全家桶流行的当下,只要你做的是Java技术栈基本上95%以上都使用的spring或springboot框架,剩下的5%基本上是一些老项目,政府项目,银行项目之类对安全性要求比较高的项目,...【详细内容】
2022-03-24  Darker.    Tags:SpringMVC框架   点击:(11)  评论:(0)  加入收藏
以前公司平台中集成了定时任务功能,但平台内部实现比较简单,使用方式有些受限,比如说无法跟踪定时任务执行状态,无法自动解决集群状态下的任务争抢问题,因此考虑升级一下任务实现...【详细内容】
2022-03-18  一只程序猿粑粑    Tags:定时任务框架   点击:(16)  评论:(0)  加入收藏
SpringBoot 集成 MybatisPlus 系列SpringBoot 版本:2.6.4 MybatisPlus 版本:3.5.1 SpringBoot整合MybatisPlus SpringBoot整合MybatisPlus数据自动填充 SpringBoot整合Mybatis...【详细内容】
2022-03-18  死牛胖子    Tags:MybatisPlus   点击:(16)  评论:(0)  加入收藏
本文内容 Spring 10种切点表达式详解 切点的组合使用 公共切点的定义声明切点@Poincut@Poincut 的使用格式如下:@Poincut("PCD") // 切点表达式 表示对哪些方法进行增强publi...【详细内容】
2022-03-18  Alinmei  博客园  Tags:Spring AOP   点击:(17)  评论:(0)  加入收藏
JS 只是在路径上运行的平台,这为 Web 开发提供了更强大的选择。Vue.Js、Node.Js、React 和 AngularJS 是一些广泛使用的前端开发框架。所有这些框架都利用 JavaScript 作为开...【详细内容】
2022-03-17  粤嵌教育    Tags:框架   点击:(16)  评论:(0)  加入收藏
简介netty为什么快呢?这是因为netty底层使用了JAVA的NIO技术,并在其基础上进行了性能的优化,虽然netty不是单纯的JAVA nio,但是netty的底层还是基于的是nio技术。nio是JDK1.4中...【详细内容】
2022-03-16  互联网科普站    Tags:Netty   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条