
摘要
本報告詳細分析了在 Commvault 中發現的兩個不同的預先認證遠端程式碼執行 (RCE) 鏈,特別是針對 11.38.20 版本。這些漏洞,編號為 WT-2025-0050、WT-2025-0049、WT-2025-0047 和 WT-2025-0048,展示了看似孤立的缺陷如何被串連起來以達到嚴重影響。本分析深入探討了 Commvault 的架構組成、每個漏洞的細節以及攻擊方法。報告著重於底層技術機制,包括引數注入、Path Manipulation,以及 hardcoded 加密金鑰的影響。報告以視覺化方式呈現攻擊鏈,以增強對攻擊流程的理解。

1. 簡介
企業備份和複製解決方案是現代 IT 基礎設施的關鍵組成部分,旨在確保資料可用性和業務連續性。然而,它們在組織網路中的特權地位和對敏感資料的存取,使它們成為 malicious actor 的高價值目標。Commvault,一個被廣泛採用的資料保護和網路彈性解決方案,是近期安全研究的主題,揭示了重大的漏洞。本報告重點關注一系列預先認證 RCE 鏈,這些 RCE 鏈可能允許未經認證的攻擊者完全控制受影響的 Commvault 實例。其目標是提供這些漏洞、其攻擊方法以及它們存在的架構環境的全面技術細分(Breakdown),從而加深對此類關鍵企業軟體相關安全風險的理解。
2. Commvault 架構概覽
了解 Commvault 的架構設計對於理解所發現漏洞的環境至關重要。Commvault 的操作框架依賴於多組件架構,以促進資料管理和保護。此架構的一個關鍵方面涉及基於 Java 的前端與基於 .NET 的後端之間的互動。外部通訊的主要介面通常是監聽 443 埠的 Tomcat 伺服器,它託管 Java 前端。在內部,IIS 服務在 81 埠上運作,提供對大量 .NET APIs 的存取。這些 APIs 是 Commvault 核心功能的中心,包含超過 5,600 個不同的端點 [1]。
一個關鍵的架構細節是 Java 前端採用的代理機制。導向至
/commandcenter/RestServlet
端點的請求不會由 Java 層直接處理。相反,它們在內部被代理到運行在
localhost:81
上的後端 .NET APIs。例如,一個外部請求,如
/commandcenter/RestServlet/Test/Echo/watchTowr
,會被轉換為對
http://localhost:81/Commandcenter/CSWebService.svc/Test/Echo/watchTowr
的內部呼叫。這個內部代理機制雖然是為內部通訊而設計,但卻成為理解外部攻擊者如何與原本無法存取的後端服務互動的焦點。
Commvault 的 API 實作存在於 .NET 8 和較舊的 .NET Framework 應用程式中。在兩個環境中都定義了 API 路由的場景中,系統優先選擇 .NET 8 版本。這種雙重實作突顯了在單一產品中跨不同技術堆疊保持一致安全狀態的複雜性。以下 C# 程式碼片段展示了 Commvault 環境中典型的 API 路由定義,演示了端點如何暴露以及輸入參數如何被處理:
- [OperationContract]
- [WebGet(UriTemplate = "/Test/EchoString/{text}", ResponseFormat = WebMessageFormat.Json)]
- string EchoString_Get(string text);
- [HttpGet("Test/EchoString/{text}")]
- public IActionResult EchoString_Get(string text)
- {
- string value = string.Empty;
- try
- {
- value = this._Echo(text);
- }
- catch (Exception ex)
- {
- base.logger.LogException(ex, "EchoString_Get", 91);
- value = ex.ToString();
- }
- return this.Ok(value);
- }
這種架構設計,特別是內部代理和 .NET APIs 的廣泛暴露,構成了所描述的預先認證 RCE 鏈的基礎。操縱這些組件之間互動的能力是利用所識別漏洞的關鍵。
3. 漏洞詳情與技術分析
Commvault 中所識別的漏洞並非孤立的缺陷,而是可以串連起來以達到重大影響的組件。本節提供了每個漏洞的詳細技術分析,重點關注其機制以及它們如何促成整體攻擊鏈。
3.1. WT-2025-0050:
qlogin
引數注入
qlogin
公用程式是 Commvault 認證過程不可或缺的命令列工具。此漏洞(WT-2025-0050)源於引數注入缺陷,該公用程式在將使用者提供的輸入作為引數傳遞給底層命令或腳本之前,未能充分清理。這種疏忽允許攻擊者注入任意命令列旗標或參數,從而改變
qlogin
的預期執行流程 [1]。
考慮一個假設場景,其中
qlogin
建構了一個類似於以下的內部命令:
some_command --user <username> --password <password>
如果攻擊者提供一個特別製作的使用者名稱,例如
--api-token-generate --user localadmin
,則內部執行的最終命令可能變成:
some_command --user --api-token-generate --user localadmin --password <password>
這種操縱可以欺騙該命令執行非預期的功能,例如為像
localadmin
這樣的現有使用者產生一個 API token,而不是僅僅認證攻擊者提供的 credential。這種繞過有效地授予未經認證的攻擊者一個有效的 API token,這是第一個 RCE 鏈中的關鍵步驟。
3.2. WT-2025-0049: QCommand Output Writer Path Manipulation
QCommand output writer 負責管理各種 QCommands 產生的輸出。Path Manipulation漏洞(WT-2025-0049)源於對檔案路徑的驗證或清理不足,允許已認證的攻擊者在檔案系統上的任意位置寫入檔案。此缺陷使攻擊者能夠透過指定絕對路徑來繞過預期的目錄限制 [1]。
例如,如果 output writer 預期一個相對路徑(例如
output.txt
)並建構一個像
/var/commvault/logs/output.txt
的檔案路徑,攻擊者可以提供一個類似
../../../../webroot/shell.jsp
的輸入。這種 malicious input 會導致 output writer 在
/webroot/shell.jsp
建立一個檔案,有效地允許攻擊者直接將 Java Server Pages (JSP) webshell 上傳到 webroot。webshell 在 webroot 中的存在賦予了攻擊者遠端程式碼執行的能力,使此漏洞成為兩個攻擊鏈中的關鍵組件。
3.3. WT-2025-0047:
_+_PublicSharingUser_
密碼外洩
此認證繞過(WT-2025-0047)允許攻擊者洩露低權限的
_+_PublicSharingUser_
的密碼。雖然此使用者通常權限有限,但未經認證就獲得其密碼的能力是一個重大的資訊洩露漏洞。這個外洩的 credential 作為一個初始立足點,為進行第二個 RCE 鏈提供了必要的資訊 [1]。此洩露的確切機制沒有完全詳細說明,但它強調了此特定使用者帳號的認證或 credential 管理過程中存在根本性缺陷。
3.4. WT-2025-0048: hardcoded 加密金鑰權限提升
存在 hardcoded 加密金鑰(WT-2025-0048)代表著一個嚴重的加密弱點。如果內建的
admin
密碼沒有從其預設值變更,此漏洞就特別相關,因為它以加密形式儲存。一個 hardcoded key 意味著加密金鑰直接嵌入在應用程式的程式碼或設定中,使具有應用程式二進制檔或記憶體存取的攻擊者可以輕易地發現 [1]。
一旦提取了 hardcoded key,攻擊者就可以解密儲存的
admin
密碼,從而將權限提升到管理使用者。這繞過了標準的認證機制,並賦予攻擊者對 Commvault 實例的完全管理控制權。此漏洞與
_+_PublicSharingUser_
密碼洩露的結合,在第二個攻擊鏈中形成了一條強大的妥協途徑。
4. 攻擊鏈
這些單一漏洞的真正影響在於它們被串連起來以實現預先認證遠端程式碼執行。已識別出兩個不同的攻擊鏈,每個都利用了所描述漏洞的獨特組合。
4.1. 鏈 1: WT-2025-0050 + WT-2025-0049
此鏈對任何未更新的 Commvault 實例都有效,且不依賴於除漏洞本身存在之外的特定環境條件。其步驟如下:
-
認證繞過 (WT-2025-0050):
未經認證的攻擊者利用
qlogin
公用程式中的引數注入漏洞,為localadmin
使用者產生一個有效的 API token。這為攻擊者提供了對 Commvault 系統的已認證存取,儘管一開始權限有限。 -
遠端程式碼執行 (WT-2025-0049):
獲得
localadmin
API token 後,攻擊者接著利用 QCommand output writer 中的Path Manipulation漏洞。這使得攻擊者能夠將一個 malicious JSP webshell 上傳到 Commvault webroot 內的任意位置。一旦 webshell 可以透過 web 伺服器存取,攻擊者就可以在底層系統上執行任意命令,實現完全的遠端程式碼執行。
此攻擊鏈的流程可視覺化如下:
4.2. 鏈 2: WT-2025-0047 + WT-2025-0048 + WT-2025-0049
此鏈取決於一個特定但常見的條件:內建的
admin
密碼自安裝以來未被變更。所涉及的步驟更為精細,但導致相同的關鍵結果:
-
認證繞過 (WT-2025-0047):
攻擊者首先利用一個認證繞過漏洞來洩露低權限的
_+_PublicSharingUser_
的密碼。此初始資訊獲得對於後續步驟至關重要。 -
權限提升 (WT-2025-0048):
利用 hardcoded 加密金鑰漏洞,攻擊者解密以加密格式儲存的內建
admin
密碼。此步驟將攻擊者的權限提升至管理使用者。 - 遠端程式碼執行 (WT-2025-0049): 擁有管理 credential 後,攻擊者接著利用與鏈 1 中相同的Path Manipulation漏洞(WT-2025-0049)。這使得能夠將 JSP webshell 上傳到 Commvault webroot,最終在系統上實現遠端程式碼執行。
此攻擊鏈的流程可視覺化如下:
5. 緩解與結論
Commvault 中所識別的預先認證 RCE 鏈強調了可能導致系統完全被攻陷的關鍵安全弱點。這些漏洞突顯了在企業級軟體中安全編碼實踐、健全的輸入驗證和安全 credential 管理的重要性。將多個看似微小的缺陷串連成一個毀滅性攻擊向量的能力,強調了對全面安全方法的需求。
為了緩解這些風險,Commvault 使用者必須:
- 立即應用更新程式: 確保所有 Commvault 實例都更新到最新的已更新版本,這些版本解決了 WT-2025-0050、WT-2025-0049、WT-2025-0047 和 WT-2025-0048(以及它們對應的 CVEs)。
- 變更預設 credential: 立即變更所有預設密碼,特別是管理帳號,以防止透過 hardcoded key 或其他預設 credential 漏洞進行攻擊。
- 實施網路區隔: 在網路內隔離 Commvault 實例,以限制暴露並防止從較不信任的區段進行未經授權的存取。
- 監控可疑活動: 實施健全的日誌記錄和監控解決方案,以偵測並警示異常活動,例如嘗試存取敏感檔案、在 webroot 中意外建立檔案,或異常的認證模式。
- 定期進行安全稽核: 定期進行安全稽核和滲透測試,以在 malicious actor 利用潛在漏洞之前,識別並解決它們。
總之,對 Commvault 漏洞的研究是一個嚴峻的提醒,即使是複雜的企業解決方案也可能潛藏關鍵安全缺陷。一個主動和分層的安全策略,結合及時的更新、安全的設定和持續的監控,對於防禦此類進階持續性威脅至關重要。本報告中提供的技術細節旨在為安全專業人員和系統管理員提供必要的洞察力,以理解和防禦這些複雜的攻擊向量。