0x00 漏洞編号
CVE-2020-1938
CNVD-2020-10487
0x01 漏洞概述
Tomcat是由Apache軟件基金(jīn)會(huì)屬下(xià)Jakarta項目開(kāi)發的Servlet容器,按照Sun Microsystems提供的技術規範,實現(xiàn)了(le)對(duì)Servlet和(hé)JavaServer Page(JSP)的支持。由于Tomcat本身也(yě)内含了(le)HTTP服務器,因此也(yě)可以視(shì)作(zuò)單獨的Web服務器。
AJP協議(yì)是Tomcat爲了(le)動靜資源處理(lǐ)分離時(shí),通過該協議(yì)可以将css、js等靜态資源請(qǐng)求轉發到(dào)Apache的http服務器處理(lǐ),提高(gāo)并發量。
而本次漏洞被稱作(zuò) Ghostcat(幽靈貓),其産生的原因是由于AJP 協議(yì)存在實現(xiàn)缺陷導緻相關參數可控,攻擊者通過AJP協議(yì)端口利用(yòng)該漏洞進行文(wén)件讀取或包含Tomcat上(shàng)所有 webapp 目錄下(xià)的任意文(wén)件,如Webapp 配置文(wén)件、源代碼等。
0x02 漏洞詳情
Tomcat默認配置(conf/server.xml)中開(kāi)啓2個Connector,一個是8080端口對(duì)外(wài)提供HTTP協議(yì),另一個是8009 端口對(duì)外(wài)提供AJP協議(yì),兩個端口默認開(kāi)啓。
在接收到(dào)AJP請(qǐng)求的時(shí)候,發現(xiàn)java/org/apache/coyote/ajp/AjpProcessor.java中的 prepareRequest() 函數的功能(néng)是對(duì) AJP 協議(yì)進行解析,可以發現(xiàn)在處理(lǐ) Constants.SC_A_REQ_ATTRIBUTE這(zhè)部分内容時(shí),代碼中未進行内容校驗,就将AJP裏面的内容取出來(lái)設置成request對(duì)象的Attribute屬性。因此,我們可以修改AJP請(qǐng)求的屬性,進而控制request對(duì)象的下(xià)面三個Attribute屬性,實現(xiàn)文(wén)件讀取。
0x03 影響版本
Tomcat 6.*
Tomcat 7.* < 7.0.100
Tomcat 8.* < 8.5.51
Tomcat 9.* < 9.0.31
0x04 自(zì)檢測試
1.在web管理(lǐ)頁面左上(shàng)方可查看(kàn)當前所使用(yòng)的Tomcat版本,若當前版本在受影響範圍内,則可能(néng)存在安全風(fēng)險。2. Github上(shàng)已經出現(xiàn)在野漏洞Poc,可以用(yòng)該Poc測試是否存在漏洞,更加準确。地址:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi(注意:python版本爲2.x,如果使用(yòng)python3需要更改部分代碼)
0x05 處置建議(yì)
1.官方已發布針對(duì)此漏洞的修複方案,Tomcat 6 已經停止維護:https://tomcat.apache.org/download70.cgihttps://tomcat.apache.org/download80.cgihttps://tomcat.apache.org/download-90.cgi
爲AJP Connector配置secret來(lái)設置 AJP 協議(yì)的認證憑證(注意必須将YOUR_TOMCAT_AJP_SECRET更改爲一個安全性高(gāo)、無法被輕易猜解的值)。
3. 未使用(yòng)AJP協議(yì)的臨時(shí)處置方法:
禁用(yòng)AJP協議(yì)端口,在conf/server.xml配置文(wén)件中注釋,并重啓Tomcat服務。
0x06 時(shí)間線
2020/01/03:長亭科技向 Apache Tomcat 官方提交漏洞
2020/02/11:Apache Tomcat 官方發布 9.0.31、8.5.51 安全更新版本
2020/02/14:Apache Tomcat 官方發布 7.0.100 安全更新版本
2020/02/20:CNVD 發布安全通告
2020/02/20:長亭科技發布漏洞風(fēng)險提示
0x07 參考鏈接
https://www.cnvd.org.cn/webinfo/show/5415
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
https://github.com/Kit4y/CNVD-2020-10487-Tomcat-Ajp-lfi-Scanner