Spring?Boot存在路徑遍歷漏洞CVE-2021-22118的問題解析
0.前言
背景:Spring Boot存在路徑遍歷漏洞。CVE-2021-22118:
官方 issue也有對此的記錄,感興趣可以看下
https://github.com/spring-projects/spring-boot/issues/26627
https://github.com/spring-projects/spring-boot/issues/27543
CVE-2021-22118 是一個在 Spring Boot 中發(fā)現(xiàn)的漏洞。該漏洞關(guān)系到 Spring Boot 的開發(fā)者工具(Devtools)中的遠(yuǎn)程更新(Remote Update)功能。在某些情況下,攻擊者可能會利用這個功能進(jìn)行目錄遍歷攻擊,從而訪問到系統(tǒng)中的敏感文件。
需要注意的是,這個漏洞只會影響到使用了 Spring Boot Devtools 的基于文件系統(tǒng)的應(yīng)用,而且應(yīng)用還必須滿足以下兩個條件之一:
- 遠(yuǎn)程更新功能被開啟(spring.devtools.restart.enabled = true)。
- 應(yīng)用使用了默認(rèn)的 HTTP 更新 URL(spring.devtools.restart.remote-secret)。
如果你的應(yīng)用滿足以上條件,建議盡快進(jìn)行修復(fù)。修復(fù)這個漏洞的方法有以下幾種:
- 將 Spring Boot 升級到 2.3.10.RELEASE 或更高版本。
- 將 Spring Boot 升級到 2.4.5 或更高版本。
- 將 Spring Boot 升級到 2.5.0 或更高版本。
關(guān)于這個漏洞的詳細(xì)信息,可以參考 Spring 官方的安全通告。
請注意,對于已經(jīng)在生產(chǎn)環(huán)境中運(yùn)行的應(yīng)用,修改CORS配置可能會影響到正常的功能。因此,在實(shí)施這個修復(fù)之前,應(yīng)該先進(jìn)行充分的測試。
1.參考文檔
CVE 官方網(wǎng)站 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22118
2.基礎(chǔ)介紹
CVE-2021-22118是在Spring Boot中發(fā)現(xiàn)的一個嚴(yán)重的路徑遍歷漏洞。這個漏洞使攻擊者能夠以應(yīng)用程序的身份訪問計算機(jī)的敏感文件和數(shù)據(jù)。
1. 影響的版本
這個漏洞影響了Spring Boot 2.3.0至2.3.7,2.4.0至`2.4.3以及2.5.0版本。
2. 漏洞利用原理:
漏洞源于Spring Boot在處理用戶輸入的URL時,未能正確處理“…/”這種可能引起路徑遍歷的模式。在Spring Boot應(yīng)用程序配置了Spring MVC并使用了默認(rèn)的資源處理時,攻擊者可以通過精心構(gòu)造的URL,訪問到應(yīng)用程序類路徑上的文件。這就使得攻擊者有可能通過這個漏洞訪問和下載敏感文件,或者執(zhí)行非法操作。
官方的修復(fù)方式是發(fā)布了新的版本,即Spring Boot 2.3.8、2.4.4
和2.5.1
。在這些版本中,官方對路徑遍歷的處理進(jìn)行了改進(jìn)。
具體來說,Spring Boot
在處理用戶請求的URL時,加強(qiáng)了對“…/”這種可能引起路徑遍歷的模式的處理。當(dāng)應(yīng)用程序檢測到請求的URL包含這種模式時,會進(jìn)行更嚴(yán)格的校驗(yàn),以防止攻擊者利用這種模式來訪問應(yīng)用程序類路徑之外的文件或目錄。
為了修復(fù)這個問題,受影響的用戶應(yīng)盡快將其Spring Boot版本升級到官方發(fā)布的新版本。實(shí)際上,這也是對待任何軟件漏洞的通用策略:一旦發(fā)現(xiàn)有漏洞存在,就應(yīng)該盡快升級到最新的、已修復(fù)該漏洞的版本。
3.解決方案
3.1. 方案1
Spring在其2.3.8、2.4.4和2.5.1版本中修復(fù)了這個漏洞。對于受到影響的用戶,推薦盡快升級到這些版本。同時,作為臨時措施,可以限制用戶能訪問的URL,或者在服務(wù)器端增加對用戶提交的URL進(jìn)行更嚴(yán)格的校驗(yàn)。
3.2. 方案2
臨時解決方案
在Nginx中,你可以使用location
指令和rewrite
指令來攔截和阻止包含"…/"的請求,以下是一個基本的示例配置:
server { listen 80; server_name your_domain.com; location / { if ($request_uri ~* "\.\.\/") { return 403; } proxy_pass http://your_upstream; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
這個配置會監(jiān)聽80端口,并將請求代理到http://your_upstream
,如果請求的URI中包含"…/“,Nginx會返回403狀態(tài)碼,即"禁止訪問”。
這只是防止路徑遍歷攻擊的一種方法,并不能完全保證安全。因此,升級到?jīng)]有這個漏洞的Spring
Boot版本,仍然是最安全的解決方案。此外,你還應(yīng)該定期更新Nginx版本,以應(yīng)用最新的安全修復(fù)。
3.3. 方案3
在Spring Boot中你可以通過定制一個攔截器來防止路徑遍歷攻擊。攔截器可以在處理請求前對請求的URL進(jìn)行檢查,如果URL包含非法字符(如"…/“或”./"),則可以拒絕該請求。== 這種可能會誤攔截,大家使用的時候注意充分測試和考慮各種渠道==
一個簡單示例可供參考
import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component public class PathTraversalInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String uri = request.getRequestURI(); if (uri.contains("../") || uri.contains("./")) { response.sendError(HttpServletResponse.SC_BAD_REQUEST); return false; } return true; } }
需要在一個配置類中將這個攔截器注冊到Spring的攔截器鏈中:
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { private final PathTraversalInterceptor pathTraversalInterceptor; public WebConfig(PathTraversalInterceptor pathTraversalInterceptor) { this.pathTraversalInterceptor = pathTraversalInterceptor; } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(pathTraversalInterceptor); } }
這樣,Spring將會在處理每個請求前,先執(zhí)行PathTraversalInterceptor
的preHandle
方法來檢查請求的URL。
這種方法 也只能作為臨時的解決方案,它不能替代升級SpringBoot到?jīng)]有該漏洞的版本。因?yàn)楣粽呖赡軙褂镁幋a繞過你的檢查,而升級Spring Boot可以徹底修復(fù)該漏洞。
到此這篇關(guān)于Spring Boot存在路徑遍歷漏洞CVE-2021-22118的文章就介紹到這了,更多相關(guān)Spring Boot漏洞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java for循環(huán)常見優(yōu)化方法案例詳解
這篇文章主要介紹了Java for循環(huán)常見優(yōu)化方法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08多模字符串匹配算法原理及Java實(shí)現(xiàn)代碼
這篇文章主要介紹了多模字符串匹配算法原理及Java實(shí)現(xiàn)代碼,涉及算法背景,原理,構(gòu)建過程簡單介紹幾Java代碼實(shí)現(xiàn)等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。2017-11-11Java中用POI實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出到Excel
這篇文章主要介紹了Java中用POI實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出到Excel,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04java項目中常用指標(biāo)UV?PV?QPS?TPS含義以及統(tǒng)計方法
文章介紹了現(xiàn)代Web應(yīng)用中性能監(jiān)控和分析的重要性,涵蓋了UV、PV、QPS、TPS等關(guān)鍵指標(biāo)的統(tǒng)計方法,并提供了示例代碼,同時,文章還討論了性能優(yōu)化和瓶頸分析的策略,以及使用Grafana等可視化工具進(jìn)行監(jiān)控與告警的重要性2025-01-01Spring?Cloud?Gateway?2.x跨域時出現(xiàn)重復(fù)Origin的BUG問題
這篇文章主要介紹了Spring?Cloud?Gateway?2.x跨域時出現(xiàn)重復(fù)Origin的BUG問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04Spring使用@Filter注解創(chuàng)建自定義過濾器
Spring 中鮮為人知但非常有用的注解之一是 @Filter,它支持自定義過濾器,下面我們就來深入研究一下如何使用 Spring 的 @Filter 注解來創(chuàng)建自定義過濾器吧2023-11-11