最近發(fā)現(xiàn)目前使用的Spring-web 5.xx 系列存在RCE(remote code execution) 的問題酿傍,講的是當(dāng)對不可信的數(shù)據(jù)進(jìn)行反序列化之時,沒有進(jìn)行有效的驗證森枪,會允許攻擊者控制執(zhí)行的狀態(tài)或流程。當(dāng)然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的對照關(guān)系,常見的我們知道java 6 的major verson 是 50, 往上逐次相加瑰妄,java 8 對應(yīng)的是52陷嘴,java 17 對應(yīng)的則是 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