疯了..spring再爆惊天大漏洞。。(代码片段)

Java技术栈 Java技术栈     2022-10-21     529

关键词:

Spring 官宣高危漏洞

大家好,我是栈长。

前几天爆出来的 Spring 漏洞,刚修复完又来?

今天愚人节来了,这是和大家开玩笑吗?

不是的,我也是猝不及防!这个玩笑也开的太大了!!

你之前看到的这个漏洞已经是过去式了:

我以为是终点,没想到只是起点,现在 Spring 又官宣了最新的高危漏洞:

Early Announcement??这只是一个早期的公告?可能还有中期?后期?往下面继续看就知道了!

漏洞详情

漏洞 CVE-2022-22965
漏洞名称 远程代码执行漏洞
严重级别 高危
影响范围 Spring Framework
- 5.3.0 ~ 5.3.17
- 5.2.0 ~ 5.2.19
- 老版本及其他不受支持的版本

麻了,麻了,这次是高危,必须引起重视啊!!

漏洞描述:

用户可以通过数据绑定的方式引发远程代码执行 (RCE) 攻击漏洞,触发的前提条件如下:

  • JDK 9+
  • Apache Tomcat(war 包部署形式)
  • Spring MVC/ Spring WebFlux 应用程序

使用 Spring Boot 开发一般都是打成 jar 包,默认内嵌 Tomcat 形式,这对使用 Docker/ 微服务这种应用特别合适,但也可以切换为 war 包部署,但很少使用,但也不是没有,比如说一般的传统项目,为了兼容老环境,或者运维统一维护 Tomcat 环境,可能也会使用 war 包部署。

所以,如果你使用的是默认的 Spring Boot 可执行 jar 包默认内嵌 Tomcat 部署,则不受影响,但由于这个漏洞的普遍性,可能还有其他方式进行利用。。难道这就是 Early Announcement 的含义?还来,真要搞疯了!

如果你想关注和学习最新、最主流的 Java 技术,可以持续关注公众号Java技术栈,公众号第一时间推送。

解决方案

Spring 用户升级到以下安全版本:

  • Spring 5.3.18+
  • Spring 5.2.20+

Spring Boot 用户升级到以下安全版本:

  • Spring Boot 2.6.6+
  • Spring Boot 2.5.12+

麻了麻了!又得升级??这 Spring Boot 2.6.5 刚发布没几天。。。可能由于这个漏洞太过于高危,没有办法,必须升级主版本应对,以免用户使用了带了漏洞的版本。

但是,如果不想升级框架主版本,也是可以的,毕竟很多应用不一定会兼容 Spring Boot 最新版本,比较 Spring Cloud 或者其他依赖的底层框架。

Spring Boot 用户可以使用以下方法临时解决:

package car.app;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.annotation.InitBinderDataBinderFactory;
import org.springframework.web.method.support.InvocableHandlerMethod;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.ServletRequestDataBinderFactory;


@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 Boot 学习笔记,这个太全了!》分享给你学习下,没用 Spring Boot 可以从 @EnableWebMvc 注解直接切换为扩展 DelegatingWebMvcConfiguration ,然后重写其 createRequestMappingHandlerAdapter 方法,具体可以参考:

https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config-advanced-java

总结

总结下这次受影响的用户:

  • JDK 9+
  • Apache Tomcat(WAR 包部署形式)
  • Spring MVC/ Spring WebFlux 应用程序

这次的大漏洞虽然是高危的,国内可能影响面有限。影响的关键还是JDK 9+ 的用户,国外用 JDK 9+ 的比较多,JDK 11 和 JDK8 占据主要阵营,JDK 17+ 也在逐步发力替代 JDK 8。

据我了解,国内用 JDK 8 的比较多,JDK 9+ 应该只是少部分群体,如果你用的 JDK 8 及以下版本,那恭喜你,目前不受影响,否则尽快修复、升级保平安。

另外还有两点要澄清一下:

1)关于 Spring 弃用 SerializationUtils 工具类的动作大家不要误解,这个工具类在 Spring 框架中只有一种用法,并且不会暴露于外部输入,弃用动作与此漏洞无关。

2)对于在报告此漏洞之前发布的 Spring Cloud Function 的漏洞 存在一些猜疑,这也和本漏洞无关。

最后,希望这次真的是终点了。。

参考文档:

最后,我也会继续关注和分享最新 Spring 漏洞进展,如果你想关注和学习最新、最主流的 Java 技术,可以持续关注公众号Java技术栈,公众号第一时间推送。

版权声明: 本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究其法律责任的权利。

近期热文推荐:

1.1,000+ 道 Java面试题及答案整理(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

疯了!spring再官宣惊天大漏洞。。

点击关注公众号,Java干货及时送达Spring官宣高危漏洞大家好,我是栈长。前几天爆出来的Spring漏洞,刚修复完又来?今天愚人节来了,这是和大家开玩笑吗?不是的,我也是猝不及防!这个玩笑也... 查看详情

log4j未平,logback又起,再爆漏洞。(代码片段)

前段时间Log4j接连爆漏洞的事儿相比把大家都折腾的不轻,很多开发都被连夜叫起来修复漏洞。这几天终于平复一些了。可是,昨晚,忽然看到技术群和朋友圈,有人开始聊Logback又爆漏洞了。这是什么情况?... 查看详情

kafka连接数过多,转疯了!(代码片段)

一、Spring面试题1、Spring在ssm中起什么作用?答:Spring:Spring轻量级框架。作用:Bean工厂,用来管理Bean的生命周期和框架集成。Spring框架的两大核心:①.IOC/DI(控制反转/依赖注入):把dao依赖注入到servic... 查看详情

log4j一波未平,logback一波又起,再爆漏洞(代码片段)

背景前些天Log4j的漏洞,不知多少程序被抓去加班,关键漏洞还是接连出现的,真是辛苦了程序员,也辛苦了Log4j的开源作者。为此,二师兄还专门写了一篇还原漏洞的文章【原文点这里】。竟然有朋友在评论... 查看详情

再爆bug!windows11任务栏菜单栏无故消失,怎么解?(代码片段)

Bug年年有,今年特别多。这不前段时间,在Windows11预览版中,有网友发现可通过漏洞直接获得系统root权限。今天,又有很多用户发现在Windows11BetaChannel版本(版本22000.176)中,当对电脑开机时,没... 查看详情

卧槽,log4j2再爆雷,log4jv2.17.0横空出世。。。(代码片段)

Log4j2再爆雷Log4j2这是没完没了了,栈长以为《玩大了!Log4j2.x再爆雷。。。》Log4j2.16.0是最终终结版本了,没想到才过多久又爆雷了:前两天栈长还说Log4j2.16.0是最安全的版本,没想到这么快就又打脸了,Log... 查看详情

卧槽,log4j2再爆雷,log4jv2.17.0横空出世。。。(代码片段)

Log4j2再爆雷Log4j2这是没完没了了,栈长以为《玩大了!Log4j2.x再爆雷。。。》Log4j2.16.0是最终终结版本了,没想到才过多久又爆雷了:前两天栈长还说Log4j2.16.0是最安全的版本,没想到这么快就又打脸了,Log... 查看详情

卧槽!log4j2再爆雷,log4jv2.17.0横空出世。。。(代码片段)

点击关注公众号,Java干货及时送达Log4j2再爆雷Log4j2这是没完没了了,栈长以为《玩大了!Log4j2.x再爆雷。。。》Log4j2.16.0是最终终结版本了,没想到才过多久又爆雷了:前两天栈长还说Log4j2.16.0是最安全的版本&... 查看详情

卧槽!log4j2再爆雷,log4jv2.17.0横空出世。。。(代码片段)

点击关注公众号,Java干货及时送达Log4j2再爆雷Log4j2这是没完没了了,栈长以为《玩大了!Log4j2.x再爆雷。。。》Log4j2.16.0是最终终结版本了,没想到才过多久又爆雷了:前两天栈长还说Log4j2.16.0是最安全的版本&... 查看详情

炸了..log4j2再爆漏洞,v2.17.1横空出世。。。

Log4j2.17.0再爆雷Log4j1.x,Log4j2.x,Logback的漏洞刚告一段落,栈长本以为这件事可以在Log4jv2.17.0这个版本终结了,没想到。。。就在昨天,栈长打开公众号,在《团灭!Log4j1.x也爆雷了。。。速速弃用!!》... 查看详情

炸了..log4j2再爆漏洞,v2.17.1横空出世。。。

Log4j2.17.0再爆雷Log4j1.x,Log4j2.x,Logback的漏洞刚告一段落,栈长本以为这件事可以在Log4jv2.17.0这个版本终结了,没想到。。。就在昨天,栈长打开公众号,在《团灭!Log4j1.x也爆雷了。。。速速弃用!!》... 查看详情

紧急!log4j2再再爆雷:刚升级,又连爆“核弹级”远程数据泄露!v2.17.0横空出世。。。...(代码片段)

...版本2.15.0,让大家升级到此版本来解决这个问题。。再爆雷当天多少个程序员,加班再改Bug,但是没过几天,官网又紧急更新了一个版本2.16.0。搜索公众号互联网架构师回复“2T”,送你一份惊喜礼包。因为&#x... 查看详情

再爆安全漏洞,中信银行java笔试题库

今天中午收到我司安全部发了一封邮件:Jackson存在安全漏洞。查了一下,这件事并不算很新鲜了(已经过了10天的样子),本文来聊聊吧。说起来还蛮戏剧化:阿里云向Jackson官方提交了一个Jackson序列化安... 查看详情

log4j未平,logback又起!再爆漏洞!!

前段时间Log4j接连爆漏洞的事儿相比把大家都折腾的不轻,很多开发都被连夜叫起来修复漏洞。这几天终于平复一些了。可是,昨晚,忽然看到技术群和朋友圈,有人开始聊Logback又爆漏洞了。这是什么情况?... 查看详情

网传的spring大漏洞(代码片段)

昨天凌晨发了篇关于Spring大漏洞的推文,白天就有不少小伙伴问文章怎么删了。主要是因为收到朋友提醒说可能发这个会违规(原因可参考:阿里云因发现Log4j2核弹级漏洞但未及时上报,被工信部处罚),... 查看详情

网传的spring大漏洞(代码片段)

昨天凌晨发了篇关于Spring大漏洞的推文,白天就有不少小伙伴问文章怎么删了。主要是因为收到朋友提醒说可能发这个会违规(原因可参考:阿里云因发现Log4j2核弹级漏洞但未及时上报,被工信部处罚),... 查看详情

网络安全spring框架漏洞总结(代码片段)

...因为对java不是很熟,所以没有对底层原理进行分析2.SpringWebFlow框架远程代码执行(CVE-2017-4971)漏洞简介SpringWebFlow是Spring的一个子项目 查看详情

spring-cloud-function-spel漏洞复现(代码片段)

Spring-Cloud-Function-Spel漏洞复现1、漏洞环境搭建  由于漏洞出现在前两天,原本等待vulhub出环境,直接docker一键就ok了。但是这次vulhub好像不太及时。对于自己只能自己搭建环境了。    找了许久,终于在唐大佬的g... 查看详情