• 我的位置:
  • 首頁
  • -
  • 漏洞預(yù)警
  • -
  • 中間件
  • -
  • Apache Tomcat文件包含漏洞詳細(xì)分析CVE-2020-1938(內(nèi)含解決方案)
    • CNNVD編號:未知
    • 危害等級: 超危 
    • CVE編號:CVE-2020-1938
    • 漏洞類型: 文件包含
    • 威脅類型:未知
    • 廠       商:未知
    • 漏洞來源:未知
    • 發(fā)布時間:2020-09-11
    • 更新時間:2020-12-11

    漏洞簡介

    2020年2月20日,CNVD公開了Apache Tomcat文件包含漏洞,CVE編號為CVE-2020-1938。Apache Tomcat 使用AJP協(xié)議通信過程中存在文件包含漏洞,由于AJP協(xié)議設(shè)計存在缺陷內(nèi)部相關(guān)的屬性可控,攻擊者可以構(gòu)造屬性值,實現(xiàn)漏洞的利用,成功利用這些漏洞可導(dǎo)致獲得敏感文件信息,甚至可以進行遠(yuǎn)程代碼執(zhí)行漏洞利用。

    漏洞公示

    以Tomcat7.0.72版本作為漏洞環(huán)境進行分析,首先我們看一下Tomcat服務(wù)器處理AJP協(xié)議的代碼。跟蹤org.apache.coyote.ajp.AjpProcessor類,tomcat在接收ajp請求之后會調(diào)用這個類處理消息,在經(jīng)過協(xié)議識別,header處理之后,會調(diào)用prepareRequest()方法對AJP請求進行預(yù)處理。


    prepareRequest()方法在AbstractAjpProcessor類中定義,此方法會預(yù)先對request請求進行一些頭部字段,屬性值的設(shè)定。如下圖:


    在設(shè)定的過程中,prepareRequest會將ajp消息里面的內(nèi)容設(shè)置為request對象中的Attribute屬性,如下圖:


    由于這種特性,我們可以控制request對象的三個Attribute屬性:

    javax.servlet.include.request_uri

    javax.servlet.include.path_info

    javax.servlet.include.servlet_path

    至此,漏洞的準(zhǔn)備工作已經(jīng)完成了,接下來就是利用這三個屬性進行漏洞的利用。


    Tomcat在處理請求的時候,如果url未在web.xml中做映射時,通常會使用默認(rèn)的DefaultServlet進行處理,在處理的過程中則會用到上面可控的三個屬性讀取文件。DefaultServlet對于常用方法的請求中,都會使用serveResource方法來獲取資源文件,再通過getRelativePath方法獲取資源文件的路徑。



    再使用上述三個可控屬性讀取文件,這個時候我們就可以通過構(gòu)造三個屬性值,讀取敏感文件信息。


    如果使用JspServlet處理請求時,同樣也會用到這三個可控屬性獲取資源文件,結(jié)合文件上傳,包含含有jsp代碼的木馬文件,則會觸發(fā)遠(yuǎn)程代碼執(zhí)行漏洞。


    4 漏洞復(fù)現(xiàn)

    搭建Tomcat 7.0.72漏洞環(huán)境,通過AJP協(xié)議向Tomcat服務(wù)器發(fā)送構(gòu)造好的數(shù)據(jù),成功獲取到了Tomcat webapp路徑下的敏感文件信息。效果如下:



    RCE利用方式


    通過包含上傳到Tomcat服務(wù)器的圖片馬,可以觸發(fā)遠(yuǎn)程代碼執(zhí)行漏洞。效果如下:

    參考網(wǎng)站

    暫無

    受影響實體

    目前受影響的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修復(fù)建議

    官方發(fā)布的最新版本(Apache Software Foundation Tomcat 7.0.100;Apache Software Foundation Tomcat 8.0.51;Apache Software Foundation Tomcat 9.0.31)已經(jīng)修復(fù)了此漏洞,請受影響的用戶下載最新版本防御此漏洞。


    下載鏈接:https://tomcat.apache.org/


    2  臨時解決方案

    如果相關(guān)用戶暫時無法進行版本升級,可根據(jù)自身情況采用下列防護措施。


    一、若不需要使用Tomcat AJP協(xié)議,可直接關(guān)閉AJP Connector,或?qū)⑵浔O(jiān)聽地址改為僅監(jiān)聽本機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,規(guī)則方可生效。


    二、若需使用Tomcat AJP協(xié)議,可根據(jù)使用版本配置協(xié)議屬性設(shè)置認(rèn)證憑證。


    使用Tomcat 7和Tomcat 9的用戶可為AJP Connector配置secret來設(shè)置AJP協(xié)議的認(rèn)證憑證。例如(注意必須將YOUR_TOMCAT_AJP_SECRET更改為一個安全性高、無法被輕易猜解的值):

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>

    使用Tomcat 8的用戶可為AJP Connector配置requiredSecret來設(shè)置AJP協(xié)議的認(rèn)證憑證。例如(注意必須將YOUR_TOMCAT_AJP_SECRET更改為一個安全性高、無法被輕易猜解的值):

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" requiredSecret="YOUR_TOMCAT_AJP_SECRET"/>


    3 深信服解決方案

    深信服安全云眼】在漏洞爆發(fā)之初,已完成檢測更新,對所有用戶網(wǎng)站探測,保障用戶安全。不清楚自身業(yè)務(wù)是否存在漏洞的用戶,可注冊信服云眼賬號,獲取30天免費安全體驗。

    注冊地址:http://saas.sangfor.com.cn


    深信服云鏡】在漏洞爆發(fā)第一時間即完成檢測能力的發(fā)布,部署了云鏡的用戶可以通過升級來快速檢測網(wǎng)絡(luò)中是否受該高危風(fēng)險影響,避免被攻擊者利用。離線使用云鏡的用戶需要下載離線更新包來獲得漏洞檢測能力,可以連接云端升級的用戶可自動獲得漏洞檢測能力。


    深信服下一代防火墻】可輕松防御此漏洞, 建議部署深信服下一代防火墻的用戶更新至最新的安全防護規(guī)則,可輕松抵御此高危風(fēng)險。


    深信服云盾】已第一時間從云端自動更新防護規(guī)則,云盾用戶無需操作,即可輕松、快速防御此高危風(fēng)險。


    深信服安全感知平臺】可檢測利用該漏洞的攻擊,實時告警,并可聯(lián)動【深信服下一代防火墻等產(chǎn)品】實現(xiàn)對攻擊者ip的封堵。


    深信服安全運營服務(wù)】深信服云端安全專家提供7*24小時持續(xù)的安全運營服務(wù)。在漏洞爆發(fā)之初,云端安全專家即對客戶的網(wǎng)絡(luò)環(huán)境進行漏洞掃描,保障第一時間檢查客戶的主機是否存在此漏洞。對存在漏洞的用戶,檢查并更新了客戶防護設(shè)備的策略,確??蛻舴雷o設(shè)備可以防御此漏洞風(fēng)險。