該漏洞是因爲Tomcat AJP協議存在缺陷而致使,攻擊者利用該漏洞可經過構造特定參數,讀取服務器webapp下的任意文件。若目標服務器同時存在文件上傳功能,攻擊者可進一步實現遠程代碼執行。python
Apache Tomcat 6git
Apache Tomcat 7 < 7.0.100github
Apache Tomcat 8 < 8.5.51web
Apache Tomcat 9 < 9.0.31tomcat
對目標主機進行端口掃描安全
能夠看到8009端口是打開的,運行AJP服務服務器
進一步使用poc驗證,讀取web.xmlapp
地址 https://github.com/0nise/CVE-2020-1938webapp
命令 python tomcat.py read_file --webapp=ROOT/ /WEB-INF/classes/application.yml 127.0.0.1
ui
如未使用 Tomcat AJP 協議,能夠直接將 Tomcat 升級到 9.0.3一、8.5.51或 7.0.100 版本進行漏洞修復。
如沒法當即進行版本更新、或者是更老版本的用戶,建議直接關閉AJPConnector,或將其監聽地址改成僅監聽本機localhost。
具體操做:
(1)編輯 <CATALINA_BASE>/conf/server.xml,找到以下行(<CATALINA_BASE> 爲 Tomcat 的工做目錄):
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />
(2)將此行註釋掉(也可刪掉該行):
<!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->
(3)保存後需從新啓動,規則方可生效。
建議將Tomcat當即升級到9.0.3一、8.5.51或7.0.100版本進行修復,同時爲AJP Connector配置secret來設置AJP協議的認證憑證。例如(注意必須將YOUR_TOMCAT_AJP_SECRET更改成一個安全性高、沒法被輕易猜解的值):
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>
如沒法當即進行版本更新、或者是更老版本的用戶,建議爲AJPConnector配置requiredSecret來設置AJP協議認證憑證。例如(注意必須將YOUR_TOMCAT_AJP_SECRET更改成一個安全性高、沒法被輕易猜解的值):
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS"requiredSecret="YOUR_TOMCAT_AJP_SECRET" />