漏洞攻擊
CVE-2023-50164 解析:揭露 Apache Struts 檔案上傳漏洞攻擊手法
本文說明 CVE-2023-50164 漏洞的技術細節,這是 Apache Struts 2 一個可能讓駭客在非經授權的情況下瀏覽檔案路徑的重大漏洞。
Apache 最近發出了一份有關 CVE-2023-50164 漏洞的公告,這是 Apache Struts 2 一個嚴重性 9.8 分的重大漏洞。CVE-2023-50164 基本上跟 Apache Struts 的架構以及檔案上傳功能的使用方式有關,此漏洞能讓駭客在未經授權的情況下瀏覽檔案路徑,而且還能上傳惡意檔案並從遠端執行程式碼 (RCE)。值得注意的是,駭客要大規模攻擊此漏洞有相當的難度,因為它缺乏像 CVE-2017-5638 漏洞那樣單純的掃描與攻擊能力。Apache 建議使用者升級至 Struts 2.5.33、6.3.0.2 或更高版本。
Apache Struts 軟體目前已廣泛內建到各種系統當中,而且在 2017 年發生的 Equifax 資料外洩事件當中一夕成名。全球約有超過 1.45 億人受到 Equifax 資料外洩事件所影響,導致這家消費者信用報告機構支付了 7 億美元的金額來和解。Equifax 事件很重要的一點就是,駭客在一次的攻擊當中就一舉偷到了 20 萬個信用卡帳號。
受影響的版本有哪些?
此次受影響的 Struts 版本包括 2.5.0 至 2.5.32 以及 6.0.0 至 6.3.0:
- Struts 2.0.0 - Struts 2.3.37 (壽命已終止)
- Struts 2.5.0 - Struts 2.5.32
- Struts 6.0.0 - Struts 6.3.0
漏洞解析
此漏洞可讓駭客篡改檔案的上傳參數,進而隨意瀏覽檔案路徑,如此一來駭客就能上傳惡意檔案,並從遠端加以執行。在此一情境下,出現漏洞的是結尾的 /upload.action 部分。
確切的情況是,含有漏洞的程式碼在處理參數時會區分大小寫。例如,含有漏洞的程式碼會將 param1="value1" 與 Param1="Value1" 視為不同,因為 HTTP 的參數是有區分大小寫的。在檢視 Apache 團隊最近修改的程式碼時,我們發現他們在處理 HTTP 參數時改成了不區分大小寫 (圖 1)。
這個 Apache Struts 漏洞的起因是參數遭到篡改。駭客篡改了請求的內容,他們不僅修改了原本的參數,更額外加入了一些使用小寫的參數。接著,這些使用小寫的參數會覆蓋某個內部的檔案名稱參數,導致系統出現漏洞而遭到攻擊。
當 ActionSupport 這個類別在處理來自 HTTP 請求的參數時,被篡改的檔案名稱當中可能包含了路徑瀏覽字元。這個漏洞會繞過 Apache Struts 在 AbstractMultiPartRequest.java 當中的 getCanonicalName 函式,讓路徑瀏覽字元保留在最後 filename(getOriginalName()) 得出來的檔案名稱當中,如圖 2 所示。
此外,我們發現該團隊還有另一段修改是有關刪除暫存檔。在這次修改之前,當檔案上傳時,getSaveDir 函式會傳回指定的路徑並且在暫存目錄產生一個暫存檔 (圖 3)。但這些暫存檔有時候並不會刪除 (假使檔案超過一定大小的話),進而造成潛在的資安風險,讓駭客有機會常駐在受害系統上 (圖 4)。我們只要能控制暫存檔的名稱,就有辦法利用這一點。
我們判斷這樣修改的目的是希望「每次都會刪除上傳的檔案」,也就是說,暫存檔案在上傳之後會正確刪除。根據另一名研究人員的深入分析發現,假使檔案大小超過了某個限制,就會觸發錯誤訊息「struts.messages.upload.error.parameter.too.long.」。接著就會執行 prepare.cleanupWrappedRequest(request); 這個方法。但是在檔案產生的過程中,當 Item.add 執行時,檔案會被拆成兩個。如果檔案超過一定的大小,就會觸發意外處理程序。
HTTP 請求長什麼樣子?
感謝 Brandon Evans 提供寶貴資訊。
HTTP 請求如下面的圖 5 所示。值得注意的是,參數名稱「Upload」同時包含了大寫和小寫字母。
結論
CVE-2023-50164 漏洞目前仍是一個駭客廣泛用來從事惡意活動的漏洞,因此對全球企業都是一項重大的資安風險。建議所有 Apache Struts 的使用者都應立即修補自己的伺服器來防範此攻擊的相關風險。此外,採用一套像 Trend Vision One™️ 這樣資安解決方案,也可協助企業守護自己的環境,不但能防範駭客,還能防範本文談到的攻擊。
Trend Micro™ Deep Security™ 可利用下列深層封包檢查 (DPI) 規則來防範利用前述漏洞的威脅:
- 1011933 - Apache Struts2 Remote Code Execution Vulnerability (CVE-2023-50164)
TippingPoint 也針對這個漏洞發布了一個 Customer Shield Writer (CSW) 檔案供客戶從 TMC 下載。以下是適用的規則:
- 43563: HTTP: Apache Struts 2 Code Execution Vulnerability