2020-02-24 15:26:13
來源:深信服科技
深信服安全團隊及時響應并發布解決方案,提醒使用Apache Tomcat服務器的用戶修復漏洞,防范攻擊。
漏洞名稱:Apache Tomcat文件包含漏洞CVE-2020-1938
威脅等級:高危
影響范圍:Apache Software Foundation Tomcat 6.*、7.0.0 - 7.0.99、8.0.0 - 8.5.50、9.0.0 - 9.0.30
漏洞類型:文件包含
利用難度:簡單
一
漏洞分析
1. Apache Tomcat組件介紹
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規范。
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶較少的場合下普遍使用,是開發和調試JSP 程序的首選之一。
2. 漏洞描述
Apache Tomcat 使用的AJP協議通信過程中存在文件包含漏洞(CVE-2020-1938),攻擊者可以通過AJP協議設計缺陷構造屬性值,實現漏洞的利用,成功利用這些漏洞可獲得敏感文件信息,甚至可以進行遠程代碼執行漏洞的利用。
3. 漏洞分析
以Tomcat7.0.72版本作為漏洞環境進行分析,首先觀察Tomcat服務器處理AJP協議的代碼,跟蹤org.apache.coyote.ajp.AjpProcessor類,發現Tomcat在接收AJP請求之后會調用這個類處理消息,在經過協議識別,header處理之后,會調用prepareRequest()方法對AJP請求進行預處理。
prepareRequest()方法在AbstractAjpProcessor類中定義,此方法會預先對request請求進行一些頭部字段、屬性值的設定。如下圖:
在設定的過程中,prepareRequest會將AJP消息里面的內容設置為request對象中的Attribute屬性。如下圖:
由于這種特性,可以控制request對象的三個Attribute屬性:
javax.servlet.include.request_uri
javax.servlet.include.path_info
javax.servlet.include.servlet_path
至此,漏洞的準備工作已經完成了,接下來就是利用這三個屬性進行漏洞的利用。
Tomcat在處理請求的的時候,如果url未在web.xml中做映射時,通常會使用默認的DefaultServlet進行處理,在處理的過程中則會用到上面可控的三個屬性讀取文件。DefaultServlet對于常用方法的請求中,都會使用serveResource方法來獲取資源文件,再通過getRelativePath方法獲取資源文件的路徑。
再使用上述三個可控屬性讀取文件,這個時候就可以通過構造三個屬性值,讀取敏感文件信息。
如果使用JspServlet處理請求時,同樣也會用到這三個可控屬性獲取資源文件,結合文件上傳,包含含有jsp代碼的木馬文件則會觸發遠程代碼執行漏洞。
4. 漏洞復現
搭建Tomcat 7.0.72漏洞環境,通過AJP協議向Tomcat服務器發送構造好的數據,成功獲取到了Tomcat webapp路徑下的敏感文件信息。效果如下:
RCE利用方式
通過包含上傳到Tomcat服務器的圖片馬,可以觸發遠程代碼執行漏洞。效果如下:
二
影響范圍
目前受影響的Apache Tomcat版本:
Apache Software Foundation Tomcat 6.*
Apache Software Foundation Tomcat 7.0.0 - 7.0.99
Apache Software Foundation Tomcat 8.0.0 - 8.5.50
Apache Software Foundation Tomcat 9.0.0 - 9.0.30
三
解決方案
1. 修復建議
Apache Tomcat官方發布的最新版本(Apache Software Foundation Tomcat 7.0.100;Apache Software Foundation Tomcat 8.0.51;Apache Software Foundation Tomcat 9.0.31)已經修復了此漏洞,請受影響的用戶下載最新版本防御此漏洞。
下載鏈接:https://tomcat.apache.org/
2. 臨時解決方案
如果相關用戶暫時無法進行版本升級,可根據自身情況采用下列防護措施。
若不需要使用Tomcat AJP協議,可直接關閉AJP Connector,或將其監聽地址改為僅監聽本機localhost。
具體操作:
(1)編輯
(2)將此行注釋掉:
(3)保存后需重新啟動Tomcat,規則方可生效。
若需使用Tomcat AJP協議,可根據使用版本配置協議屬性設置認證憑證。
使用Tomcat 7和Tomcat 9的用戶可為AJP Connector配置secret來設置AJP協議的認證憑證。例如(注意必須將YOUR_TOMCAT_AJP_SECRET更改為一個安全性高、無法被輕易猜解的值):
使用Tomcat 8的用戶可為AJP Connector配置requiredSecret來設置AJP協議的認證憑證。例如(注意必須將YOUR_TOMCAT_AJP_SECRET更改為一個安全性高、無法被輕易猜解的值):
3. 深信服解決方案
【深信服安全云眼】
在漏洞爆發之初,已完成檢測更新,對所有用戶網站探測,保障用戶安全。不清楚自身業務是否存在漏洞的用戶,可注冊信服云眼賬號,獲取30天免費安全體驗。
注冊地址:http://saas.sangfor.com.cn
【深信服云鏡】
在漏洞爆發第一時間即完成檢測能力的發布,部署了云鏡的用戶可以通過升級來快速檢測網絡中是否受該高危風險影響,避免被攻擊者利用。離線使用云鏡的用戶需要下載離線更新包來獲得漏洞檢測能力,連接云端升級的用戶可自動獲得漏洞檢測能力。 不清楚自身業務是否存在漏洞的用戶,可部署深信服云鏡,及時發現存在的風險。
【深信服下一代防火墻】
可輕松防御此漏洞,建議部署深信服下一代防火墻的用戶更新至最新的安全防護規則,可輕松抵御此高危風險。
【深信服云盾】
已第一時間從云端自動更新防護規則,云盾用戶無需操作,即可輕松、快速防御此高危風險。
【深信服安全感知平臺】
可檢測利用該漏洞的攻擊,實時告警,并可聯動深信服下一代防火墻等產品實現對攻擊者IP的封堵。
【深信服安全運營服務】
深信服云端安全專家提供7*24小時持續的安全運營服務。在漏洞爆發之初,云端安全專家即對用戶的網絡環境進行漏洞掃描,保障第一時間檢查用戶的主機是否存在此漏洞。對存在漏洞的用戶,檢查并更新防護設備的策略,確保用戶防護設備可以防御此漏洞風險。