- 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)介
漏洞公示
以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)站
受影響實(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)。