
一鍵入侵:Voyager 漏洞背後的驚人真相
研究人員發現並揭露了多個漏洞,包括任意檔案寫入(Arbitrary file writing)和反射型跨站腳本攻擊(Reflected Cross-Site Scripting),最終導致潛在的遠端程式碼執行。儘管多次嘗試,研究人員仍無法聯繫專案維護人員來解決這些問題。

技術細節
部落格文章「The Tainted Voyage: Uncovering Voyager's Vulnerabilities」的「技術細節」部分描述了在Voyager PHP 套件中發現的安全漏洞。研究人員發現並揭露了多個漏洞,包括任意檔案寫入中發現的一系列安全漏洞。本節首先引用 SonarQube Cloud 的初步報告,該報告發現 Voyager 的媒體上傳元件中存在Path traversal漏洞 。這項初步發現引發了更深入的調查,揭示了進一步的漏洞和可能導致遠端程式碼執行的攻擊場景。
任意檔案寫入漏洞(CVE-2024-55417):
- 儲存檔案之前會進行兩項檢查:權限檢查以確保使用者俱有 browser_media 權限,以及 MIME 類型檢查以確保檔案是允許的類型。
- getMimeType 函數用於確定檔案類型,而檔案類型依檔案內容決定。
- 可以製作多語言檔案來繞過 MIME 類型檢查,從而允許惡意程式碼偽裝成影像等安全檔案類型。
此漏洞源自於 Voyager 處理檔案上傳的方式。具體來說,Voyager 使用 getMimeType 函數根據檔案內容確定檔案的 MIME 類型。 儘管這樣做比使用檔案副檔名更安全,但它很容易被操縱。攻擊者可以建立一個「多語言」檔案,看起來是 MIME 類型檢查允許的類型(如圖像),但包含惡意 PHP 程式碼。由於 Voyager 不檢查檔案副檔名,攻擊者可以為上傳的檔案添加 PHP 副檔名,從而使伺服器執行惡意程式碼。
反射式跨站點腳本-XSS (CVE-2024-55416):
- 此漏洞可與其他漏洞結合,實現遠端程式碼執行。
- 此端點允許刪除檔案並顯示未清理的彈出訊息,這使其容易受到 XSS 攻擊。
此漏洞存在於 /admin/compass 端點,該端點透過 GET 請求處理操作。攻擊者可以精心設計一個經過驗證的使用者可以點擊的 URL,從而導致在使用者的瀏覽器中執行 JavaScript 程式碼。發生這種情況的原因是檔案名稱在彈出訊息顯示之前沒有經過清理。
任意檔案外洩和刪除(CVE-2024-55415):
使用相同的 /admin/compass 端點,攻擊者可以操縱經過驗證的使用者刪除任意檔案。這是因為Log檔案的路徑未正規化或修改,並且僅在嘗試刪除之前檢查檔案是否存在。該端點也可用於下載文件,但內容不會直接暴露給攻擊者。此XSS漏洞可用於將檔案內容傳送到攻擊者的伺服器。
結論
「技術細節」一節解釋說,這些漏洞結合在一起,可以對 Voyager 實例實施一鍵式遠端程式碼執行攻擊。它還解釋了 Voyager 在其媒體上傳功能中使用的檢查,以及攻擊者如何透過已發現的漏洞來繞過這些檢查。