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

标签: 前沿资讯 Spring 前沿资讯 | 发表时间:2022-03-31 23:27 | 作者:
出处:https://blog.didispace.com/

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

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

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

CVE-2022-22965

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

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

Spring Framework RCE, Early Announcement - Update

下面就来一起看看这个被网传了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方法来实现。

参考资料

好了,今天的分享就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的 Spring技术交流群,参与交流与讨论,更好的学习与进步!更多 Spring Boot教程可以点击直达!,欢迎收藏与转发支持!

相关 [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详解

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

Spring定时

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

简单Spring+hessian

- - Web前端 - ITeye博客
简单的Spring+hessian. dist\modules里面的 spring-webmvc.jar . lib\caucho 里面的hessian-3.1.3.jar. 里面有个接口interface:. 建立一个model层:(实现Serializable接口). 在WEB-INF下面创建一个remoting-servlet.xml:.

Spring MVC 和 Struts2

- - CSDN博客架构设计推荐文章
Web层面的框架学习了三个Struts1和2,SpringMVC,那他们之间肯定存在一个优劣和适用的环境,Struts1和2的异同点我已经做过对比《 Struts1和Struts2》,这篇将对比下Struts2和SpringMVC的异同,下面数据基本来源于网络,本人是搜集整理所得,供大家参考. 一个项目使用什么样的技术,决定的因素很多,我所能想到的有:对系统的性能、开发的效率、团队学习的成本、业务场景等,下面尽量从这几个方面入手,来分析比较下他们之间存在的优劣.

Spring AOP详解

- - Java - 编程语言 - ITeye博客
        最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP来解决. 一方面是为了以更加灵活的方式来解决问题,另一方面是借此机会深入学习Spring AOP相关的内容. 例如,以下需求不用AOP肯定也能解决,至于是否牵强附会,仁者见仁智者见智. 1.对部分函数的调用进行日志记录,用于观察特定问题在运行过程中的函数调用情况.

spring roo 入门

- - 企业架构 - ITeye博客
Spring官网下载STS(如果没有STS). 创建Spring Roo基础项目. 根 据ROO的提示输入jpa setup再按ctrl+space,很遗憾这个快捷键已经被输入法切换占用,不能借助提示输入命令,但我们可以打开ROO命令向导,这里我们输入jpa 可以查到这条命令的用法,根据提示增加provider和database选项来完成命令.