前幾天項目收到阿里報警,說Jackson反序列話出現漏洞(高危),如下:
呃呃,出現漏洞無非就是更新版本嘍,想也沒想,直接將pom.xml中對應的版本升級到最新,build,run,一切都沒有問題,緊接着需要找到有哪些模塊引用了該組件,全文搜索了一遍,並無位置引用,尋思着改了半天基本沒用,就去掉pom文件中該組件中的依賴,更新maven依賴,重新啟動,項目依然正常,正常邏輯,找到當時加此依賴的同事,確定加依賴的場景:布拉巴拉,刪掉沒問題;
以為問題完美解決,於是重新更新maven依賴,瞅了一眼External Libraries庫,emmm,發現pom移除的對應的版本組件沒有了,但是有其他兩個版本的依賴,無非就是有其他組件引用到了jackson的版本;分析出哪些組件引用了jackson版本,打開多年未用的eclipse,分析:
找到對應的組件,共有三個不同版本,2.8.4,2.7.9,以及2.9.5版本,其中最終使用的是2.9.5版本,在看springboot中使用的是2.8.10,本以為:由於項目中使用了不同組件A,B,C,其中A,B,C都依賴了不同版本的組件d,那么最終的springboot.jar是會有c不同版本的jar;最終解壓出springboot.jar發現只有一個版本的jar文件:如下圖
結論1: 如果項目A依賴了d-2.1.jar,同時依賴了b和c組件,b和c組件依賴了d-1.0.jar和d-2.0.jar,最終打出的war包或者jar包只會有一個d版本的jar文件;並且重復依賴了jar最重要的是引發代碼異常,最常見的就是NoSuchMethod;
所以springboot.jar中只有jackson-2.8.10的jar,這里引用的是2.8.10的jar,我們找到springboot的依賴庫:點擊 spring-boot-starter-parent,進入springboot的dependencies如下圖
那么此處是否只要修改了springboot中的jackson的版本是否就可以,找到springboot中引用的是jackson-bom,去maven倉庫找jackson-bom的版本:https://mvnrepository.com/artifact/com.fasterxml.jackson/jackson-bom
果然找到符合的版本,則在pom文件中配置對應的版本即可:如下圖
在run,找到對應的springboot.jar解壓,扎到lib下的jar包,發現jackson-databind 已經是安全的版本2.9.9.3;
總結:1.項目中jar包重復依賴問題
2.重復依賴分析思路---找到每個依賴對應的依賴組件
3.springboot中更新其中組件版本的方法
4.通過最終打出來的jar包確定引用版本