漏洞描述
當應用程序使用UriComponentsBuilder來解析外部提供的URL(如通過查詢參數)并對解析的URL的主機執行驗證檢查時可能容易受到Open重定向攻擊和SSRF攻擊,導致網絡釣魚和內部網絡探測等。
受影響產品或系統
6.1.0 <= Spring Framework <= 6.1.3
6.0.0 <= Spring Framework <= 6.0.16
5.3.0 <= Spring Framework <= 5.3.31
官方建議修復方案
Spring?Framework?版本6.1.x 用戶:升級到 6.1.3
Spring?Framework?版本6.0.x 用戶:升級到 6.0.16
Spring??Framework?版本5.3.x 用戶:升級到 5.3.31
其它已經不受官方支持的版本(5.1.x,5.2.x)同樣受到影響,更新到受官方支持的安全版本。
那么springboot項目我們該怎么修復該漏洞呢?
查看 springboot的版本,只有最新的3.1.9和3.2.3 修復了該漏洞。
如果現有項目的大版本是3.x,直接升級即可,但是有些老項目還停留在2.x的版本,官方并沒有針對2.x發布新版本,從2.x直接升級到3.x,代價又比較大。
一開始我們嘗試直接替換spring-web的版本,但是只替換這一個包的話項目啟動會報錯,通過實踐和反復嘗試,我們對spring相關的jar包都進行了覆蓋,這樣可以保持springboot的版本號不變。具體覆蓋的jar包如下:
<!-- spring-web 相關 begin --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jcl</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.32</version></dependency><!-- spring-web相關 end -->
只需要將上述依賴添加到pom.xml文件中即可覆蓋springboot默認的版本,替換后效果如下:
項目啟動正常
如果啟動后訪問接口報錯,需要更換跨域配置,將corsConfiguration.addAllowedOrigin("*")替換為corsConfiguration.addAllowedOriginPattern("*");
好了,上面的操作都完成后,漏洞就修復了,接下來有需要的話可以慢慢的升級到大版本!