当前位置: 首页 > 后端技术 > Java

Spring官网公示重大漏洞并提供解决方案

时间:2023-04-01 23:14:25 Java

春天来了!这些天您是否厌倦了阅读此类标题?然而,如果你仔细观察,他们都在吹嘘以前无关紧要的CVE。所以,昨天,我发了一篇关于最近网上流传的Spring大漏洞的文章,说说这些让人摸不着头脑的营销文章,提醒大家不要去下载一些利用漏洞提供补丁的钓鱼内容。对于网上流传的这个漏洞,我们还是很关注的,因为它可能确实存在,只是官方没有公布。前不久(3月31日晚),Spring社区发表了一篇名为《Spring Framework RCE, Early Announcement》的文章,正式公布了近期网上流传的Spring漏洞。这也证实了该线上漏洞确实存在,并非近期多篇文章中提到的3月28-29日发布的CVE。如果您按照那些文章解决了问题,请按照本官方公告的内容重新开始。.本次识别的Spring核心框架RCE漏洞CVE编号为CVE-2022-22965[1]。AntGroupFG的codePlutos、meizjm3i于周二深夜向VMware报告了该漏洞。周三,Spring正式调查分析并确定了问题的解决方案,并计划于周四发布紧急版本。由于该漏洞在网上泄露,Spring官方紧急发布了相关修复版本。因为是Spring核心框架的漏洞,所以涉及面很广。因此,在这篇博文中,不断更新进度。以下是截至本文发表时的进展时间线:来看看这个在网上流传了2天的神秘漏洞的官方公告内容和解决方案。影响范围利用该漏洞需要满足以下条件:JDK9+使用ApacheTomcat部署,使用WAR打包,依赖spring-webmvc或spring-webflux。虽然国内大部分用户可能还是使用JDK8,或者使用内置的Tomcat来运行,但是由于该漏洞的相对普遍性,不排除其他利用方式的存在。所以DD还是建议尽快升级到最新版本,避免可能出现的风险。解决方案因为这次不是在线传输,而是Spring官宣,所以解决方案比较完整,也比较容易。受影响用户可通过以下方式解决该漏洞风险:Spring5.3.x用户升级至5.3.18+Spring5.2.x用户升级至5.2.20+SpringBoot2.6.x用户升级至2.6.6+SpringBoot2.5.x用户升级到2.5.12+关于漏洞回顾和更多细节,这里限于篇幅,就不详细介绍了。感兴趣的朋友可以关注公众号程序猿DD,回复“CVE-2022-22965”获取更深入的分析文档。那么,这里需要再次提一下,之前收到消息并有所行动的小伙伴们,如果猜对了,是不是应该用下面的方案来处理呢?@ControllerAdvice@Order(Ordered.LOWEST_PRECEDENCE)publicclassBinderControllerAdvice{@InitBinderpublicvoidsetAllowedFields(WebDataBinderdataBinder){String[]denylist=newString[]{"class.*","Class.*","*.class.*“,“*。班级。*”};dataBinder.setDisallowedFields(拒绝列表);}}这个方法DD在微信群里也看到过不少次(点击加群)。在本次Spring官方推文中,确认该方法有效,但可能会留下一些其他隐患,尤其是Controller通过自身的@InitBinder方法在本地设置disalloedFields时,该方法会覆盖全局设置。为了以更安全的方式应用该解决方案,应用程序可以扩展RequestMappingHandlerAdapter以在所有其他初始化结束后更新WebDataBinder。官方给出了更好的解决方案,如下面这样:@SpringBootApplicationpublicclassMyApp{publicstaticvoidmain(String[]args){SpringApplication.run(CarApp.class,args);}@BeanpublicWebMvcRegistrationsmvcRegistrations(){returnnewWebMvcRegistrations(){@OverridepublicRequestMappingHandlerAdaptergetRequestMappingHandlerAdapter(){returnnewExtendedRequestMappingHandlerAdapter();}};}privatestaticclassExtendedRequestMappingHandlerAdapterextendsRequestMappingHandlerAdapter{@OverrideprotectedInitBinderDataBinderFactorycreateDataBinderFactory(Listmethods){returnnewServletRequestDataBinderFactory(methods,getWebBindingInitializer()){@OverrideprotectedServletRequestDataBindercreateBinderInstance(对象目标,字符串名称,NativeWebRequest请求)抛出异常{ServletRequestDataBinderbinder=super.createBinderInstance(target,name,request);字符串[]字段=binder.getDisallowedFields();ListfieldList=newArrayList<>(fields!=null?Arrays.asList(fields):Collections.emptyList());fieldList.addAll(Arrays.asList("class.*","Class.*","*.class.*","*.Class.*"));binder.setDisallowedFields(fieldList.toArray(newString[]{}));退货活页夹;}};对于不在SpringBoot应用下的SpringMVC用户,可以直接从@EnableWebMvc切换到extendDelegatingWebMvcConfiguration,参考[3]中描述文档的高级配置部分,然后重写createRequestMappingHandlerAdapter方法来实现好了,今天的分享就到这里!如果你在学习过程中遇到困难?可以加入我们超优质的Spring技术交流群,参与交流讨论,更好的学习进步!更多SpringBoot教程可直接点击!,欢迎收藏和转发支持!参考文献[1]https://spring.io/blog/2022/0...[2]https://tanzu.vmware.com/secu...[3]https://docs.spring.io/spring...欢迎关注我的:程序员DD。第一时间了解行业前沿资讯,分享深度技术干货,获取优质学习资源