更多安全資訊和分析文章請關注啟明星辰ADLab微信公眾號及官方網站(adlab.venustech.com.cn)
2020年2月20日,國家信息安全漏洞共享平臺(CNVD)發布關於Apache Tomcat的安全公告,Apache Tomcat文件包含漏洞(CNVD-2020-10487,對應CVE-2020-1938)。Tomcat AJP協議由於存在實現缺陷導致相關參數可控,攻擊者利用該漏洞可通過構造特定參數,讀取伺服器webapp下的任意文件。若伺服器端同時存在文件上傳功能,攻擊者可進一步實現遠程代碼的執行。通過對Apache Tomcat源碼進行分析,發現Tomcat在處理ajp協議時存在漏洞,可通過調用request.setAttribute為Tomcat設置任意request屬性,如下圖所示:通過分析復現發現Tomcat ajp協議存在web目錄下任意文件讀取漏洞以及JSP文件包含漏洞。當ajp URI設置為非jsp路徑時,Tomcat會調用DefaultServlet處理,此時會導致web目錄任意文件讀取漏洞。當ajp URI設置為jsp路徑時,Tomcat會調用JspServlet處理,此時會導致JSP文件包含漏洞。
2.1 Web目錄任意文件讀取漏洞
當ajp URI設置為非jsp路徑時,Tomcat會調用DefaultServlet處理,我們需要控制如下兩個屬性:javax.servlet.include.path_infojavax.servlet.include.servlet_path
其中,javax.servlet.include.servlet_path屬性為當前項目路徑、javax.servlet.include.path_info屬性為目錄路徑。然後,通過DefaultServlet類的getRelativePath方法進行拼接獲得path路徑。如下圖所示:
最後,會將path帶入到getResource(path)方法中造成任意文件讀取。如下圖所示:
同樣會獲取javax.servlet.include.path_info、javax.servlet.include.servlet_path這兩個屬性(經過上面的分析我們已經知道可以通過ajp協議控制這兩個屬性)。將這兩個屬性對應的值拼接到jspURi變量中,最後交給serviceJspFile方法處理,如下圖所示:
Venus.txt文件代碼如下所示:
成功RCE結果如下圖所示:
Tomcat 6
Tomcat 7
Tomcat 8
Tomcat 9
將Tomcat立即升級到9.0.31、8.5.51或7.0.100版本進行修復。禁用AJP協議。
編輯 /conf/server.xml,找到如下行:<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />
<!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>
ADLab成立於1999年,是中國安全行業最早成立的攻防技術研究實驗室之一,微軟MAPP計劃核心成員,「黑雀攻擊」概念首推者。截止目前,ADLab已通過CVE累計發布安全漏洞1000餘個,通過 CNVD/CNNVD累計發布安全漏洞600餘個,持續保持國際網絡安全領域一流水準。實驗室研究方向涵蓋作業系統與應用系統安全研究、移動智能終端安全研究、物聯網智能設備安全研究、Web安全研究、工控系統安全研究、雲安全研究。研究成果應用於產品核心技術研究、國家重點科技項目攻關、專業安全服務等。