Tomcat文件包含漏洞的搭建與復現:CVE-2020-1938
漏洞描述
2020年2月20日,國家信息安全漏洞共享平台(CNVD)發布了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)。該漏洞是由於Tomcat AJP協議存在缺陷而導致,攻擊者利用該漏洞可通過構造特定參數,讀取服務器webapp目錄下的任意文件,如:webapp 配置文件或源代碼等。若目標服務器同時存在文件上傳功能,攻擊者可進一步實現遠程代碼執行。目前,廠商已發布新版本完成漏洞修復。
Apache Tomcat都是Apache開源組織開發的用於處理HTTP服務的免費項目,可以作為獨立的Web服務器運行。Tomcat是Apache軟件基金會中的一個重要項目,性能穩定且免費,是目前較為流行的Web應用服務器。由於Tomcat應用范圍較廣,所以本次通告的漏洞影響范圍較大,請相關用戶及時采取防護措施或者升級補丁修復此漏洞。
影響范圍
受影響版本
- Apache Tomcat 6
- Apache Tomcat 7 < 7.0.100
- Apache Tomcat 8 < 8.5.51
- Apache Tomcat 9 < 9.0.31
不受影響版本
- Apache Tomcat = 7.0.100
- Apache Tomcat = 8.5.51
- Apache Tomcat = 9.0.31
環境搭建
准備工具
漏洞利用
首先成功搭建tomcat環境:
本次漏洞利用的是AJP協議,該協議工作在8009端口,查看本機已開啟:
使用CNVD-2020-10487-Tomcat-Ajp-lfi-master的poc利用成功讀取WEB-INF/web.xml
文件:
該POC讀取目錄為ROOT,其他目錄不行:
我們在目錄下新建一個test.txt的文檔,使用poc成功讀取
上面腳本只支持python2,我們使用AJPy-master的poc同樣成功,這個腳本還能對tomcat進行暴力破解,文件上傳等
可以修改--webapp=manager來指定查看webapp目錄下的子目錄中文件
漏洞防護
官方升級
目前官方已在最新版本中修復了該漏洞,請受影響的用戶盡快升級版本進行防護,官方下載鏈接:
版本號 | 下載地址 |
---|---|
Apache Tomcat 7.0.100 | http://tomcat.apache.org/download-70.cgi |
Apache Tomcat 8.5.51 | http://tomcat.apache.org/download-80.cgi |
Apache Tomcat 9.0.31 | http://tomcat.apache.org/download-90.cgi |
其他安全防護措施
如果相關用戶暫時無法進行版本升級,可根據自身情況采用下列防護措施。
關閉AJP
如若用不到Tomcat AJP協議,可直接關閉AJP Connector,或將其監聽地址改為僅監聽本機localhost。
具體操作如下
a. 編輯 <CATALINABASE>/conf/server.xml
,找到如下行(<CATALINABASE>
為 Tomcat
的工作目錄):`
<Connectorport=”8009″protocol=”AJP/1.3″ redirectPort=”8443″/>
b. 然后將其注釋掉或者刪掉, (以下為注釋的方式):
<!–<Connectorport=”8009″protocol=”AJP/1.3″redirectPort=”8443″ />–>
c. 保存后重新啟動Tomcat,即可生效.
添加認證憑證
如若需要使用AJP協議,可根據當前版本配置協議屬性設置認證憑證,主要使用配置AJP配置中的secretRequired跟secret屬性來限制認證。
具體操作如下
使用Tomcat 7和Tomcat 9的用戶可為AJP Connector配置secret來設置AJP協議的認證憑證。例如(注意必須將YOURTOMCATAJP_SECRET
更改為一個安全性高、無法被輕易猜解的值):
<Connectorport="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>
使用Tomcat 8的用戶可為AJP Connector配置requiredSecret來設置AJP協議的認證憑證。例如(注意必須將YOURTOMCATAJP_SECRET
更改為一個安全性高、無法被輕易猜解的值):
<Connectorport="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" requiredSecret="YOUR_TOMCAT_AJP_SECRET"/>