跳轉到內容

OpenClinica 使用者手冊/TomcatAjp漏洞

來自華夏公益教科書,為開放世界提供開放書籍

2020 年 3 月 3 日,tomcat 的 AJP 聯結器中釋出了一個漏洞。發現該漏洞的團隊將其命名為 ghostcat。Apache-Tomcat 已為該漏洞釋出了補丁。此頁面的目的是幫助您決定是否應該採取行動,以及如果應該,以什麼方式採取行動。

我應該擔心嗎?

[編輯 | 編輯原始碼]

如果您是 OpenClinica 管理員,您應該擔心,因為 OpenClinica 在 tomcat 上執行,因此您可能會面臨風險。

簡短版本

[編輯 | 編輯原始碼]

讓我們為更技術性的讀者簡短說明:如果 ajp 被啟用並在暴露給網際網路的埠上監聽,您就會面臨風險。如果您屬於這種情況:下載並安裝最新版本的 tomcat,截至撰寫本文時,2020 年 3 月 5 日,7.0.100 https://tomcat.apache.org/download-70.cgi

別急:先告訴我 ajp 是什麼

[編輯 | 編輯原始碼]

有幾種方法可以與 tomcat 通訊,或者:連線到 tomcat。因此,這些不同的方法被稱為 聯結器。您可能知道可以使用 http 和/或 https 在某些埠上進行通訊。典型的開箱即用安裝允許在埠 8080 上進行 http 通訊。但是,也許您已使用證書設定了安全通訊,並在埠 8443 上使用 https。此外,您可能有一個為 ajp 開放的埠,ajp 代表 Apache JServ 協議。這主要用於您有單獨的 Web 伺服器(例如 Apache 或 IIS)時,它執行所有繁重的加密工作並提供靜態內容。如果您的情況是這樣,請跳過下一段。如果您沒有單獨的 Web 伺服器,請再讀一段。

我沒有單獨的 Web 伺服器:我安全嗎?

[編輯 | 編輯原始碼]

您可能不會“使用”ajp,因為您沒有單獨的 Web 伺服器,但不幸的是,這並不意味著您是安全的。在您的安裝中,您可能已激活了 ajp-connector,並且它現在正在監聽,預設情況下在埠 8009 上。您可以透過發出以下命令來檢查這一點:

netstat -vatn|grep 8009

如果輸出類似於

tcp6       0      0 :::8009                 :::*                    LISTEN

那麼您就知道 ajp 處於活動狀態並正在監聽。

或者,您可以在 server.xml 中查詢類似以下內容的內容:

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" maxParameterCount="-1" maxPostSize="-1" />

如果您不需要 ajp,您可以安全地將其停用,方法是在 server.xml 中將其註釋掉:

<!-- Define an AJP 1.3 Connector on port 8009 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" maxParameterCount="-1" maxPostSize="-1" />
-->

所以 ajp 正在監聽:這意味著我存在風險嗎?

[編輯 | 編輯原始碼]

如果 ajp 正在監聽,那麼是的,您確實存在風險,但前提是該埠暴露給外部世界。如果您已設定防火牆以僅允許埠 443 上的 https,以及可能用於維護的某些其他埠,那麼您就不存在風險。

ajp 正在監聽,我必須將埠暴露給外部

[編輯 | 編輯原始碼]

現在,如果由於任何原因您無法停用 ajp,並且無法阻止對該埠 8009(或您定義的任何埠)的通訊,那麼您必須升級 tomcat。

安裝補丁

[編輯 | 編輯原始碼]

如果您想修補您的 tomcat 安裝,請執行以下操作:可能大多數 OpenClinica 安裝使用 tomcat7,因此請訪問 https://tomcat.apache.org/download-70.cgi 第一個包含修復程式的版本是 tomcat 7.0.100。該版本包含一個額外的檢查,用於使用 ajp-connector,即 secret。您可以在 server.xml 中設定此額外檢查,例如:

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" maxParameterCount="-1"
     secretRequired="true" secret="un_deux_trois" />

如果您現在重新啟動 tomcat 並嘗試請求頁面,使用 Apache 結合 ajp,您將獲得 403。
很好。因為這也會是攻擊者的結果。

要採取的最後一步是將 secret 告知 Apache,以便它可以與 tomcat 通訊。
這在 worker.properties 檔案中完成:

worker.tomcat7.port=8009
worker.tomcat7.host=localhost
worker.tomcat7.type=ajp13
worker.tomcat7.secret=un_deux_trois

該漏洞由一箇中國團隊發現,他們釋出了一些背景資訊。您可以在 https://www.chaitin.cn/en/ghostcat 上了解有關 ghostcat 的更多資訊。

可以在 https://tomcat.apache.org/migration-7.html#Tomcat_7.0.x_noteable_changes 上找到 tomcat7 中更改的簡短版本。

華夏公益教科書