Spring Boot Web 升級須知

最近發(fā)現(xiàn)目前使用的Spring-web 5.xx 系列存在RCE(remote code execution) 的問題,講的是當對不可信的數(shù)據(jù)進行反序列化之時,沒有進行有效的驗證,會允許攻擊者控制執(zhí)行的狀態(tài)或流程。當然CVE-2016-1000027敘述中也提到了這個問題只是有可能存在,在于此工具包如何在產(chǎn)品中實現(xiàn),對數(shù)據(jù)的驗證可能是需要的。

而在spring-web 6.xx 系列,則不存在這個問題了,但若想升級到6.xx,發(fā)現(xiàn)此版本是存在于?spring-boot-starter-web 3.xx之中的,而對于Spring boot 3.xx,同Spring 6.xx 一樣,需要基于JDK 17 的運行環(huán)境。

比如環(huán)境使用的是JDK 8, 若強行單個包的升級,比如單純將spring-web 升級到6.xx的版本,則會報“class file has wrong version 61.0, should be 52.0” 的問題,說的是class類是基于61編譯的,但是運行環(huán)境是52. 對于Major version 和 java SE的對照關系,常見的我們知道java 6 的major verson 是 50, 往上逐次相加,java 8 對應的是52,java 17 對應的則是 61。

所以若想升級spring-web 到6.xx,必須至少將JDK升級到17。否則可以看看項目是否真的存在RCE的vulnerablility問題,若能做到對接收數(shù)據(jù)的驗證,確保是對可信任數(shù)據(jù)的序列化,則可以規(guī)避此問題。

值得一提的是在Spring-boot 3.0 中,開始使用了Jakarta(Jakarta EE 9 APIs)替代javax, 而這個?Jakarta EE 9 卻是依然可以運行在JDK 8 上的。

參考內(nèi)容:

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web/3.0.0

https://stackoverflow.com/questions/57775378/deserialization-of-untrusted-data-in-jms-security-issue

https://security.snyk.io/vuln/SNYK-PHP-CODECEPTIONCODECEPTION-1324585

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1000027

https://docs.oracle.com/javase/specs/jvms/se19/html/jvms-4.html#jvms-4.1-200-B.2

https://stackoverflow.com/questions/74648576/java-class-file-has-wrong-version-61-0-should-be-55-0

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容