Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹 。所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷惑的营销文、以及提醒大家不要去下载一些利用漏洞提供补丁的钓鱼内容 。而对于这个网传的漏洞,依然保持关注状态,因为确实可能存在,只是没有官宣 。
就在不久前(3月31日晚),Spring社区发布了一篇名为《Spring Framework RCE, Early Announcement》的文章,官宣了最近网传的Spring漏洞 。证实了网传漏洞确实存在,并且并非最近很多文章说提到的3月28、29日公布的CVE,如果你是照着那些文章解决问题的话,请根据这次官宣内容重新来过吧 。
这次确定的Spring核心框架中的RCE漏洞,CVE号为CVE-2022-22965 。
文章插图
这个漏洞是在周二深夜,由AntGroup FG的codePlutos,meizjm3i向VMware报告 。周三,Spring官方对该问题进行了调查、分析并确定了解决方案,同时计划在周四进行紧急版本的发布 。
由于该漏洞被泄漏在网络上,所以Spring官方紧急发布了相关修复的版本,因为是Spring核心框架中的漏洞,所以涉及面较广 。所以在这篇博文中也是在不断的持续更新进展,下面截止到本文发稿的进展时间线:
文章插图
下面就来一起看看这个被网传了2天的神秘漏洞的官宣内容和解决方案 。
影响范围该漏洞的利用需要满足下面的条件:
- JDK 9 +
- 使用Apache Tomcat部署
- 使用WAR方式打包
- 依赖spring-webmvc或spring-webflux
解决方案因为这次不是网传,而是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+
然后,这里需要特别再提一下,之前已经收到消息并有所行动的小伙伴,没猜错的话应该都是用下面的解决方案来处理的吧?
【Spring官宣网传大漏洞,附解决方案】
@ControllerAdvice@Order(Ordered.LOWEST_PRECEDENCE)public class BinderControllerAdvice {@InitBinderpublic void setAllowedFields(WebDataBinder dataBinder) {String[] denylist = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};dataBinder.setDisallowedFields(denylist);}}
这个方法DD在微信群里(点击加群)也看到蛮多次了 。这次Spring官方推文里,证实了该方法是有效的,但可能会留下一些其他隐患,特别是当Controller通过其自己的@InitBinder方法在本地设置disalloedFields时,该方法会覆盖全局设置 。为了以更安全的方式应用解决方案,应用程序可以扩展RequestMAppingHandlerAdapter,以便在所有其他初始化结束后更新WebDataBinder 。官方给出了更好的解决方案,比如下面这样:
@SpringBootApplicationpublic class MyApp { public static void main(String[] args) {SpringApplication.run(CarApp.class, args); } @Bean public WebMvcRegistrations mvcRegistrations() {return new WebMvcRegistrations() {@Overridepublic RequestMappingHandlerAdapter getRequestMappingHandlerAdapter() {return new ExtendedRequestMappingHandlerAdapter();}}; } private static class ExtendedRequestMappingHandlerAdapter extends RequestMappingHandlerAdapter {@Overrideprotected InitBinderDataBinderFactory createDataBinderFactory(List<InvocableHandlerMethod> methods) {return new ServletRequestDataBinderFactory(methods, getWebBindingInitializer()) {@Overrideprotected 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中的18个注解,你会几个?
- SpringBoot WebFlux整合R2DBC实现数据库反应式编程
- 电影|日本“千年美少女”桥本环奈新片《暴力行动》官宣 粉色短发女杀手
- 新能源汽车|比理想厚道 岚图官宣调价:纯电涨、增程不涨
- 黄晓明|网传《纵横芯海》筹备,都市职场剧,男主是黄晓明,女主颜值惊艳
- 微型电动车|抄宏光MINI EV作业 东风风光MINIEV官宣涨价:贵了三四千
- 比亚迪|比亚迪累计未交付订单40万辆 汉官宣“卖爆”
- iQOO|骁龙8不热了!iQOO Neo6官宣:次世代游戏旗舰
- 人社局|网传《纵横芯海》筹备,都市职场剧,男主是黄晓明,女主颜值惊艳
- 联想| 全新CNC金属中框设计 联想拯救者Y9000X 2022官宣:质感倍增!