Spring官宣网传大漏洞,并提供解决方案
Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹。所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷惑的营销文、以及提醒大家不要去下载一些利用漏洞提供补丁的钓鱼内容。而对于这个网传的漏洞,依然保持关注状态,因为确实可能存在,只是没有官宣。
就在不久前(3月31日晚),Spring社区发布了一篇名为《Spring Framework RCE, Early Announcement》的文章,官宣了最近网传的Spring漏洞。这也证实了网传漏洞确实存在,并且并非最近很多文章说提到的3月28、29日公布的CVE,如果你是照着那些文章解决问题的话,请根据这次官宣内容重新来过吧。
这次确定的Spring核心框架中的RCE漏洞,CVE号为CVE-2022-22965[1]。

这个漏洞是在周二深夜,由AntGroup FG的codePlutos,meizjm3i向VMware报告。周三,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方法来实现。
好了,今天的分享就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!
参考资料
- [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
欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源
Spring官宣网传大漏洞,并提供解决方案的更多相关文章
- [刘阳Java]_Web前端入门级练习_迅雷官宣网设计
也有一段时间没有写一些技术专题文章,今天给大家来几篇Web前端入门级练习的文章.主讲<迅雷官宣网>的设计,相信大家平时也用过迅雷这个下载工具,所以分享的这篇技术大家在一定程序会感兴趣. 先 ...
- Spring 官宣发布 Spring Boot 3.0 第一个里程碑 M1,从 Java 8 提升到 Java 17!
Spring官方于2022年1月20日发布Spring Boot 3.0.0-M1版本,预示开启了Spring Boot 3.0的里程碑,相信这是通往下一代Spring框架的激动人心的旅程. 接下来一 ...
- 上传大文件(100G)的解决方案
4GB以上超大文件上传和断点续传服务器的实现 随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求. 但是在很多情况下,平台运营方并没有大文件上 ...
- spring mvc 文件上传报“由于没有提供multi-part配置,无法处理parts”
在使用springMVC进行文件上传时,报了HTTP 500的错. 才发现原来是在springmvc.xml配置文件中,multipart中的id写错了. 错误代码: <!-- 配置文件解析器- ...
- 老版本的Spring应用该如何应对CVE-2022-22965漏洞?
昨天,在发布了<Spring官宣承认网传大漏洞,并提供解决方案>之后.群里就有几个小伙伴问了这样的问题:我们的Spring版本比较老,该怎么办?这是一个好问题,所以DD今天单独拿出来说说. ...
- Spring官网下载dist.zip的几种方法
Spring官网下载dist.zip的几种方法 Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更“高大上”的maven方式来管理所依赖的jar包, ...
- Spring官网jar包下载方法
Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更“高大上”的maven方式来管理所依赖的jar包,但是完全没想到中国的国情,在伟大的墙内,直接通过ma ...
- Spring官网阅读 | 总结篇
接近用了4个多月的时间,完成了整个<Spring官网阅读>系列的文章,本文主要对本系列所有的文章做一个总结,同时也将所有的目录汇总成一篇文章方便各位读者来阅读. 下面这张图是我整个的写作大 ...
- Spring官网阅读(十八)Spring中的AOP
文章目录 什么是AOP AOP中的核心概念 切面 连接点 通知 切点 引入 目标对象 代理对象 织入 Spring中如何使用AOP 1.开启AOP 2.申明切面 3.申明切点 切点表达式 excecu ...
随机推荐
- 【C#表达式树 一】Expressions 命名空间 38个类 2个接口 3个枚举
注解 抽象类 Expression 提供用于为表达式树建模的类层次结构的根. 此命名空间中派生自的类 Expression (例如 MemberExpression 和 ParameterExpres ...
- PyTorch深度学习实践——处理多维特征的输入
处理多维特征的输入 课程来源:PyTorch深度学习实践--河北工业大学 <PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili 这一讲介绍输入为多维数据时的分类. 一个数据集 ...
- Leaflet:LayerGroup、FeatureGroup
LayerGroup(Layer) Layer 用法:把一些Layer集中到一个组Group中,以便作为一个整体进行操作.如果把该Group加入到了Map中,任何从这个Group增加或者移除Layer ...
- QT之HTTP
概述 QT的HTTP操作都是异步的,内部通过线程实现. 相关类: QNetworkAccessManager [发送网络请求并接收响应] QNetworkReply [服务响应] QNetworkRe ...
- Spring注解简析
JAVA 元注解 @Documented @Inherited @Retention @Target @Repeatable @Native 在java.lang.annotation包下,除了@Na ...
- Angular + Github action + Nginx 部署
在常规 Web 的开发流程之中,当开发步入尾声时就需要部署应用到服务器上,Angular 部署上还算简单.经过测试,部署平均用时在5分钟左右,主要受限于 GitHub 海外服务器的网速. 一.Angu ...
- BBS项目(二)
目录 BBS项目(二) ORM 创建相关表 表模型 修改admin样式 Simple-UI 注册表添加数据 注册forms类编写 注册功能前端搭建 头像实时显示功能实现 BBS项目(二) 可以在本地写 ...
- 云e办笔记(删减)
1JwtTokenUtils工具 2公共返回对象 3Admin实现UserDetails 4AdminLoginParam 5AdminLoginController 6SecurityConfig ...
- CTS,CLS,CLR
1)CTS通用类型系统(Common Type System) CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展.任何以.NET平台作为目标的语言必须建立它的数 ...
- Net中委托之三委托的高级应用
1. 使用委托来解决逻辑分离,解除耦合 2.委托的高级应用实例 using System; using System.Collections.Generic; using System.Linq; u ...