Java 是目前 Web 開(kāi)發(fā)中最主流的編程語(yǔ)言,而 Tomcat 是當(dāng)前最流行的 Java 中間件服務(wù)器之一,從初版發(fā)布到現(xiàn)在已經(jīng)有二十多年歷史,在世界范圍內(nèi)廣泛使用。

Ghostcat(幽靈貓) 是由我國(guó)長(zhǎng)亭科技安全研究員發(fā)現(xiàn)的存在于 Tomcat 中的安全漏洞,由于 Tomcat AJP 協(xié)議設(shè)計(jì)上存在缺陷,攻擊者通過(guò) Tomcat AJP Connector 可以讀取或包含 Tomcat 上所有 webapp 目錄下的任意文件,例如可以讀取 webapp 配置文件或源代碼。此外在目標(biāo)應(yīng)用有文件上傳功能的情況下,配合文件包含的利用還可以達(dá)到遠(yuǎn)程代碼執(zhí)行的危害。該漏洞被記錄為 【 CVE-2020-1938 】
https://www.chaitin.cn/zh/ghostcat
正如網(wǎng)絡(luò)威脅情報(bào)公司Bad Packets?在周六所說(shuō)的那樣,“針對(duì)此漏洞的大規(guī)模掃描活動(dòng)已經(jīng)開(kāi)始。請(qǐng)立即修補(bǔ)!”
為什么這個(gè)漏洞被稱(chēng)作 Ghostcat(幽靈貓)?
這個(gè)漏洞影響全版本默認(rèn)配置下的 Tomcat(在我們發(fā)現(xiàn)此漏洞的時(shí)候,確認(rèn)其影響 Tomcat 9/8/7/6 全版本,而年代過(guò)于久遠(yuǎn)的更早的版本未進(jìn)行驗(yàn)證),這意味著它在 Tomcat 里已經(jīng)潛伏了長(zhǎng)達(dá)十多年的時(shí)間。
Tomcat AJP Connector 是什么?
Tomcat Connector 是 Tomcat 與外部連接的通道,它使得 Catalina 能夠接收來(lái)自外部的請(qǐng)求,傳遞給對(duì)應(yīng)的 Web 應(yīng)用程序處理,并返回請(qǐng)求的響應(yīng)結(jié)果。
默認(rèn)情況下,Tomcat 配置了兩個(gè) Connector,它們分別是 HTTP Connector 和 AJP Connector:
HTTP Connector:用于處理 HTTP 協(xié)議的請(qǐng)求(HTTP/1.1),默認(rèn)監(jiān)聽(tīng)地址為 0.0.0.0:8080
AJP Connector:用于處理 AJP 協(xié)議的請(qǐng)求(AJP/1.3),默認(rèn)監(jiān)聽(tīng)地址為 0.0.0.0:8009
HTTP Connector 就是用來(lái)提供我們經(jīng)常用到的 HTTP Web 服務(wù)。而 AJP Connector,它使用的是 AJP 協(xié)議(Apache Jserv Protocol),AJP 協(xié)議可以理解為 HTTP 協(xié)議的二進(jìn)制性能優(yōu)化版本,它能降低 HTTP 請(qǐng)求的處理成本,因此主要在需要集群、反向代理的場(chǎng)景被使用。
Ghostcat 漏洞有哪些危害?
通過(guò) Ghostcat 漏洞,攻擊者可以讀取 Tomcat所有 webapp目錄下的任意文件。
此外如果網(wǎng)站應(yīng)用提供文件上傳的功能,攻擊者可以先向服務(wù)端上傳一個(gè)內(nèi)容含有惡意 JSP 腳本代碼的文件(上傳的文件本身可以是任意類(lèi)型的文件,比如圖片、純文本文件等),然后利用 Ghostcat 漏洞進(jìn)行文件包含,從而達(dá)到代碼執(zhí)行的危害。
哪些版本的 Tomcat 受到 Ghostcat 漏洞影響?
| Apache Tomcat版本 | 受影響的版本 | 已修復(fù)的版本 |
| Apache Tomcat 9 | 9.0.30 及以下 | 9.0.31 |
| Apache Tomcat 8 | 8.5.50 及以下 | 8.5.51 |
| Apache Tomcat 7 | 7.0.99 及以下 | 7.0.100 |
| Apache Tomcat 6 | 所有版本 | 不再提供修復(fù) |
什么情況下的 Tomcat 可以被 Ghostcat 漏洞利用?
對(duì)于處在漏洞影響版本范圍內(nèi)的 Tomcat 而言,若其開(kāi)啟 AJP Connector 且攻擊者能夠訪(fǎng)問(wèn) AJP Connector 服務(wù)端口的情況下,即存在被 Ghostcat 漏洞利用的風(fēng)險(xiǎn)。
注意 Tomcat AJP Connector 默認(rèn)配置下即為開(kāi)啟狀態(tài),且監(jiān)聽(tīng)在 0.0.0.0:8009 。
Ghostcat 漏洞該如何修復(fù)或緩解?
Tomcat 官方已發(fā)布 9.0.31、8.5.51 及 7.0.100 版本針對(duì)此漏洞進(jìn)行修復(fù)。
要正確修復(fù)此漏洞,首先需要確定您的服務(wù)器環(huán)境中是否有用到 Tomcat AJP 協(xié)議:
- 如果未使用集群或反向代理,則基本上可以確定沒(méi)有用到 AJP;
- 如果使用了集群或反向代理,則需要看集群或反代服務(wù)器是否與 Tomcat 服務(wù)器 AJP 進(jìn)行通信
1. 如果未使用 Tomcat AJP 協(xié)議:
如果確定未使用 Tomcat AJP 協(xié)議,則可以直接將 Tomcat 升級(jí)到 9.0.31、8.5.51 或 7.0.100 版本進(jìn)行漏洞修復(fù)。
而對(duì)于確定未使用 Tomcat AJP 協(xié)議,但無(wú)法進(jìn)行版本更新、或者是更老版本的用戶(hù),可以考慮直接關(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)將此行注釋掉(或直接刪掉此行):<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->
(3)更改完畢后,重啟 Tomcat 即可。
除以上措施外,當(dāng)然也可以采用防火墻等辦法以阻止不可信任的來(lái)源訪(fǎng)問(wèn) Tomcat AJP Connector 端口。
2. 如果使用了 Tomcat AJP 協(xié)議:
如果確定服務(wù)器環(huán)境中使用到了 Tomcat AJP 協(xié)議,則建議將 Tomcat 升級(jí)到 9.0.31、8.5.51 或 7.0.100 版本,同時(shí)為 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" />
而對(duì)于無(wú)法進(jìn)行版本更新、或者是更老版本的用戶(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" />
在線(xiàn)檢測(cè)工具
Chaitin Tech還提供了一個(gè)安全評(píng)估工具,可以幫助您發(fā)現(xiàn)容易受到針對(duì)網(wǎng)絡(luò)上Ghostcat攻擊的Tomcat服務(wù)器: https://www.chaitin.cn/zh/ghostcat

此漏洞雖然只影響 Tomcat服務(wù)器,但是漏洞的危害實(shí)在是太嚴(yán)重了,所以WordPress大學(xué)也發(fā)文告知。安全無(wú)小事,如果您的服務(wù)器存在這個(gè)漏洞,請(qǐng)務(wù)必及時(shí)更新系統(tǒng)版本!!




