技術的快速崛起對熟練的開發人員產生了很高的需求。開源軟體 (OSS) 已成為這個不斷增長的工作力的重要工具。現在,有數十萬個完善的 OSS 包存在於各種程式設計語言中。超過 90% 的開發人員在其專有應用程式中利用這些開源元件,突出了 OSS 的效率和價值主張。進一步強調其重要性,到 2030 年,全球開源軟體市場預計將達到 807 億美元,預計每年增長率為 16.7%。
軟體是全球業務營運不可或缺的一部分,因此經常成為威脅行為者的目標。2023年,應用程式安全支出約為57.6億美元,預計2024年將達到66.7億美元。在 AppSec 中,軟體供應鏈安全在過去三年中得到了重視,是增長最快的攻擊類別,重大違規和漏洞利用經常成為頭條新聞。
組織通常認為大多數風險都源於面向公眾的 網路應用程式。然而,近年來,這種觀點發生了變化。每個應用程式中都有數十個小組件,現在風險可能從代碼庫內的任何地方出現。對於組織來說,熟悉軟體開發生命週期中現有和新出現的安全漏洞比以往任何時候都更加重要。在這篇博文中,我們的研究生研究員詳細介紹了 CVE-2023-23924,這是一個在廣泛使用的 dompdf 庫中發現的關鍵安全漏洞,dompdf 庫是一種強大的 PHP 工具,可以從 HTML 和 CSS 動態生成 PDF 檔案。
透過綜合分析,我們將探討這個漏洞的技術複雜性、起關鍵作用的相關技術,以及對利用過程的類比。我們還將研究如何 OPSWAT MetaDefender Core,特別是其 軟體物料清單 (SBOM) 引擎,可用於檢測和緩解此漏洞,使軟體開發人員和安全團隊能夠在潛在威脅面前領先一步。
CVE-2023-23924 的背景
在 dompdf 版本 2.0.1 中發現了一個安全漏洞,並於 2023 年初公開:
- dompdf 2.0.1 上的 URI 驗證可以透過傳遞 SVG 解析來繞過
<image>
帶有大寫字母的標記。這使得攻擊者可以使用任意協定調用任意 URL,從而導致 PHP 8.0.0 之前的版本中出現任意物件反序列化。透過 PHAR URL 包裝器,此漏洞可導致任意檔案刪除,甚至遠端代碼執行,具體取決於可用的類。 - NVD 分析師對 CVE-2023-23924 的 CVSS 評分為 9.8 嚴重 。
瞭解 Dompdf 漏洞
要完全理解 dompdf 中的 CVE-2023-23924 漏洞,必須熟悉兩種密切相關的技術:可縮放向量圖形 (SVG) 和 PHAR 檔。
SVG(可縮放向量圖形)是一種多功能的圖像格式,由於它能夠在 Web 上呈現高品質圖形,同時保持輕量級和可擴充性,因此獲得了廣泛的普及。與游柵圖像不同,SVG 基於 XML 標記,允許對線條、形狀和文本等元素進行精確控制。SVG 的主要優勢之一是它們能夠在不損失圖像品質的情況下無縫縮放,使其成為回應式網頁設計和高解析度顯示器的理想選擇。
PHAR(PHP Archive)類似於 JAR 檔概念,但用於 PHP。透過將所有PHP代碼和資源檔捆綁到一個存檔檔中,它允許輕鬆部署。
PHAR 檔由 4 個部分組成:
- 存根: 包含用於引導存檔的代碼。
- 清單: 包含存檔的元數據。元數據以序列化格式儲存,可用於觸發惡意 PHAR 檔中的 PHP 反序列化攻擊。
- 檔案內容: 包含壓縮檔的內容,包括PHP代碼、資源檔。
- 簽名(可選): 包含用於驗證檔案完整性的數據。
由於元數據以序列化格式儲存,因此當在 PHP 函數(如 file_get_contents()、fopen()、file()、file_exists()、md5_file()、filemtime()、
或 檔案大小()
.這種安全疏忽可能使攻擊者能夠透過 PHAR 檔執行遠程代碼。
Dompdf如何生成PDF檔
透過分析, OPSWAT 研究員發現,在dompdf的轉換過程中有三個階段。要將 HTML 檔轉換為 PDF 格式,dompdf 庫首先將輸入檔解析為 DOM 樹,並儲存每個物件的位置和布局資訊。接下來,將解析 CSS 樣式並將其應用於每個物件。最後,將物件重新組織以適應頁面並呈現到最終的 PDF 檔中。
為了增強安全性,dompdf 在進行下一步之前實施了驗證以確保 URI 輸入的安全。在處理 SVG 檔案期間,此驗證過程在 xlink:href
屬性。
如果 SVG 輸入檔包含 <image>
標記下 <svg>
標記中,則實現條件以僅允許某些協定,例如 http://
, https://
和 file://
,對於 xlink:href
田。
這 resolve_url()
函數將先驗證 URI,然後再使用 drawImage()
功能。如果 URI 中的方案不在允許的協定中,則 resolve_url()
函數將向應用程式返回異常。
如果 URI 透過了驗證,它將被傳遞給 drawImage()
函數,該函數使用 file_get_contents()
函數來處理 URI 值 xlink:href
屬性。此時出現了安全漏洞:如果攻擊者可以繞過驗證並將 PHAR 包裝器傳遞到 URI 中,則可能會觸發 PHAR 反序列化攻擊。
分析后發現,僅對具有確切名稱圖像的標籤執行驗證。
因此,可以透過在標籤名稱中將一個或多個字元大寫(例如 Image)來輕鬆繞過它。因此,使用 Image 而不是 Image 的特製 SVG 檔可能會逃避此驗證。
在後續步驟中, drawImage()
函數,將 SVG 檔中的 URI 傳遞給 file_get_contents()
功能。因此,驗證繞過和對 PHAR 檔的反序列化攻擊的結合允許攻擊者執行遠程代碼。如果應用程式伺服器由易受攻擊的 dompdf 版本處理,則此漏洞為惡意攻擊者打開了透過 SVG 檔破壞應用程式伺服器的大門。
Dompdf開發類比
為了將此漏洞利用模擬為真實世界的場景, OPSWAT 研究生研究員使用 dompdf 庫版本 2.0.1 開發了一個具有 HTML 到 PDF 轉換功能的 網路應用程式。此應用程式允許使用者上傳 HTML、XML 或 SVG 等檔案類型,然後將它們轉換為 PDF 檔案。
攻擊者將按照以下步驟在使用易受攻擊的 dompdf 版本(版本 2.0.1)的應用程式中利用此漏洞:
首先,攻擊者生成一個惡意物件,該對象在調用析構函數時創建一個反向shell。
其次,攻擊者創建一個包含惡意元數據物件的 PHAR 檔。當 PHAR 包裝器在 file_get_content()
函數,則對元數據進行反序列化,並處理指定的物件。在此反序列化過程中,它會觸發析構函數並執行反向shell。
最終,攻擊者將包含 PHAR 包裝器的 URI 連結嵌入到 xlink:href
屬性來繞過驗證,執行惡意代碼,並將此惡意檔案上傳到應用程式。
在處理上傳的惡意 SVG 檔案期間,應用程式會與攻擊者建立反向連接,從而使他們能夠破壞應用程式伺服器。
使用以下方法保護開源元件 OPSWAT MetaDefender Core
為了檢測和緩解 dompdf 中的 CVE-2023-23924 漏洞,我們的研究生研究員利用了 OPSWAT MetaDefender Core,一種多層網路安全產品,提供先進的惡意軟體預防和檢測技術,包括 SBOM。
OPSWAT SBOM 透過為原始程式碼和容器提供全面的元件清單來保護軟體供應鏈。透過分析dompdf庫及其依賴, OPSWAT SBOM 可以快速識別易受攻擊的版本 2.0.1 的存在,並提醒使用者注意潛在風險。
此外 OPSWAT SBOM 可以檢測相關技術,例如 SVG 和 PHAR 檔,這些技術對於理解和緩解 CVE-2023-23924 漏洞至關重要。這種對應用程式軟體元件的整體視圖使安全團隊能夠做出明智的決策,並採取適當的措施來解決已識別的風險。
除了檢測易受攻擊的dompdf版本外, OPSWAT SBOM 還提供有關受影響元件、其版本以及任何可用更新或補丁的寶貴見解。此資訊使安全團隊能夠確定修復工作的優先順序,並確保應用程式更新到 dompdf 的安全版本,從而有效解決 CVE-2023-23924 漏洞。
透過利用內部的 SBOM 引擎 MetaDefender Core,組織可以主動監控其軟體供應鏈,識別開源元件中的潛在漏洞,並及時實施緩解策略,確保其應用程式的整體安全性和完整性。
結束語
在 dompdf 庫中發現 CVE-2023-23924 凸顯了在應用程式安全的動態環境中保持警惕的迫切需要。透過利用這篇文章文章中概述的見解和策略,安全團隊可以有效地檢測、緩解和保護其應用程式免受此類漏洞的侵害,從而確保其軟體生態系統的整體安全性和完整性。