瘋了!Spring 再官宣驚天大漏洞..
點擊關注公眾號,Java干貨及時送達
Spring 官宣高危漏洞
大家好,我是棧長。
前幾天爆出來的 Spring 漏洞,剛修復完又來?
今天愚人節(jié)來了,這是和大家開玩笑嗎?
不是的,我也是猝不及防!這個玩笑也開的太大了??!
你之前看到的這個漏洞已經是過去式了:

我以為是終點,沒想到只是起點,現在 Spring 又官宣了最新的高危漏洞:

Early Announcement??這只是一個早期的公告?可能還有中期?后期?往下面繼續(xù)看就知道了!
漏洞詳情

| 漏洞 | CVE-2022-22965 |
|---|---|
| 漏洞名稱 | 遠程代碼執(zhí)行漏洞 |
| 嚴重級別 | 高危 |
| 影響范圍 | Spring Framework - 5.3.0 ~ 5.3.17 - 5.2.0 ~ 5.2.19 - 老版本及其他不受支持的版本 |
麻了,麻了,這次是高危,必須引起重視啊??!
漏洞描述:
用戶可以通過數據綁定的方式引發(fā)遠程代碼執(zhí)行 (RCE) 攻擊漏洞,觸發(fā)的前提條件如下:
- JDK 9+
- Apache Tomcat(war 包部署形式)
- Spring MVC/ Spring WebFlux 應用程序
使用 Spring Boot 開發(fā)一般都是打成 jar 包,默認內嵌 Tomcat 形式,這對使用 Docker/ 微服務這種應用特別合適,但也可以切換為 war 包部署,但很少使用,但也不是沒有,比如說一般的傳統(tǒng)項目,為了兼容老環(huán)境,或者運維統(tǒng)一維護 Tomcat 環(huán)境,可能也會使用 war 包部署。
所以,如果你使用的是默認的 Spring Boot 可執(zhí)行 jar 包默認內嵌 Tomcat 部署,則不受影響,但由于這個漏洞的普遍性,可能還有其他方式進行利用。。難道這就是 Early Announcement 的含義?還來,真要搞瘋了!
如果你想關注和學習最新、最主流的 Java 技術,可以持續(xù)關注公眾號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 剛發(fā)布沒幾天。。??赡苡捎谶@個漏洞太過于高危,沒有辦法,必須升級主版本應對,以免用戶使用了帶了漏洞的版本。
但是,如果不想升級框架主版本,也是可以的,畢竟很多應用不一定會兼容 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?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?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+ 也在逐步發(fā)力替代 JDK 8。
據我了解,國內用 JDK 8 的比較多,JDK 9+ 應該只是少部分群體,如果你用的 JDK 8 及以下版本,那恭喜你,目前不受影響,否則盡快修復、升級保平安。
另外還有兩點要澄清一下:
1)關于 Spring 棄用 SerializationUtils 工具類的動作大家不要誤解,這個工具類在 Spring 框架中只有一種用法,并且不會暴露于外部輸入,棄用動作與此漏洞無關。
2)對于在報告此漏洞之前發(fā)布的 ?Spring Cloud Function 的漏洞 存在一些猜疑,這也和本漏洞無關。
最后,希望這次真的是終點了。。
參考文檔:
https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
https://tanzu.vmware.com/security/cve-2022-22965
最后,我也會繼續(xù)關注和分享最新 Spring 漏洞進展,如果你想關注和學習最新、最主流的 Java 技術,可以持續(xù)關注公眾號Java技術棧,公眾號第一時間推送。
版權聲明: 本文系公眾號 "Java技術棧" 原創(chuàng),原創(chuàng)實屬不易,轉載、引用本文內容請注明出處,抄襲者一律舉報+投訴,并保留追究其法律責任的權利。

23 種設計模式實戰(zhàn)(很全)
Spring Boot 保護敏感配置的 4 種方法!再見單身狗!Java 創(chuàng)建對象的 6 種方式阿里為什么推薦使用 LongAdder?AnotherRedisDesktopManager 開始收費了?別再寫爆爆爆炸類了,試試裝飾器模式!Java 18 發(fā)布,默認 UTF-8,finalize 被棄用。。
Spring Boot 3.0 M1 發(fā)布,正式棄用 Java 8Spring Boot 學習筆記,這個太全了!
關注Java技術??锤喔韶?/strong>
獲取 Spring Boot 實戰(zhàn)筆記!
