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

    漏洞簡(jiǎn)介

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

    漏洞公示

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


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


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


    由于這種特性,我們可以控制request對(duì)象的三個(gè)Attribute屬性:

    javax.servlet.include.request_uri

    javax.servlet.include.path_info

    javax.servlet.include.servlet_path

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


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



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


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


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

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



    RCE利用方式


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

    參考網(wǎng)站

    暫無(wú)

    受影響實(shí)體

    目前受影響的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

    補(bǔ)丁

    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ù)了此漏洞,請(qǐng)受影響的用戶(hù)下載最新版本防御此漏洞。


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


    2  臨時(shí)解決方案

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


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


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


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

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

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

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


    3 深信服解決方案

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

    注冊(cè)地址:http://saas.sangfor.com.cn


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


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


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


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


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