在這篇文章中,我們將探討 CVE-2024-36401--一個在 GeoServer 中發現的安全漏洞,GeoServer 是一個基於 Java 的開放原始碼伺服器,廣泛用於地理空間資料處理與分享。此漏洞可能允許未驗證使用者執行 RCE (遠端程式碼執行),這強調了儘快修補 GeoServer 部署的重要性。
在我們最新的安全分析中,兩位OPSWAT 研究員透過以下方式調查此種威脅:
- 深入檢視 CVE 的攻擊向量
- 找出攻擊者可能利用來攻擊 GeoServer 的安全漏洞
- 模擬攻擊者如何入侵GeoServer 部署
我們也會分享OPSWAT SBOM 技術如何偵測此漏洞,並提供可實施的步驟,讓團隊在攻擊者襲擊前保護其地理空間基礎架構。

GeoServer 概觀
GeoServer是基於 Java 的開放源碼伺服器,專為檢視、編輯與分享地理空間資料而設計。GeoServer 最初於 2001 年由 TOPP(The Open Planning Project,開放式規劃專案)推出,旨在透過開放式空間資料交換,提升大眾對政府與都市規劃的參與。二十多年後的今天,GeoServer 已經發展成為一個強大的平台,能夠處理各種空間資料格式,並與不同的資料來源整合。
GeoServer 提供基於OGC(開放地理空間聯盟)標準的服務,包括
CVE-2024-36401 的背景
CVE-2024-36401會影響 2.25.2、2.24.4 及 2.23.6 之前的 GeoServer 版本。此漏洞是由於在多個 OGC 請求參數中,以 XPath 表達式不安全地評估屬性名稱所引起。攻擊者可透過在預設的 GeoServer 安裝中注入精心製作的輸入,利用此漏洞建立 RCE (遠端執行程式碼)。
根據 GitHub 安全公告,此漏洞的 CVSS v3.1 得分為 9.8 (Critical)。
GeoServer 的簡單與複雜功能比較
GeoServer 支援簡單與複雜的特徵類型,以容納不同的地理空間資料結構,從平面到複雜的嵌套資料集。然而,這些資料類型的 XPath 表達式處理上的缺陷,使得 CVE-2024-36401 容易被攻擊。
簡單功能
簡單特徵類型以平面格式表示直接的地理空間資料,其中資料庫中的每一行對應一個地理空間特徵;而每一屬性則直接映射至 XML 元素。
舉例來說,代表公司的表格有 id、name 和 location 等欄位,可以輕鬆轉換成簡單的 XML 功能。
id | 姓名 | 地點 |
1 | OPSWAT 發布 | 點 (10.769829, 106.685248) |
複雜功能
相比之下,複雜特徵類型可處理更複雜的資料。這種特徵類型支援巢狀屬性以及不同資料集之間的關係。這些複雜模式不是自動產生的,而是使用社群標準定義的,如 GeoServer 的應用程式模式擴充概述。
例:
在之前的公司表下,我們新增一個外鍵 gu_id
來描述公司與其相對應的地質單位之間的關係:
id | 姓名 | 地點 | gu_id |
1 | OPSWAT 發布 | 點 (10.769829, 106.685248) | 12 |
地質單位資訊單獨儲存於表 地質單位
:
gu_id | 瓮 | 描述 |
12 | urn:x-demo:feature:GeologicUnit:12 | 變質片麻岩 |
透過這些表格,我們可以將公司映射到 sa:取樣公司
,其中包含一個嵌套的 gsml:地質單位
.此設定會產生複雜的功能,因為它涉及由社群規格定義的巢狀類型和關係,而非自動產生的模式。
這樣的靈活性對於建模複雜的真實世界場景是不可或缺的,但也會因其依賴先進的處理技術 (如 JXPath 評估) 來有效管理巢狀結構而引入漏洞。
漏洞如何產生
GeoServer 的設計是使用 XPath 評估來處理複雜的特徵類型(例如 Application Schema 資料庫中的特徵類型)。但由於處理不當,它也錯誤地將 XPath 評估應用於簡單的特徵類型。這造成了攻擊向量,因為
- GeoServer 依賴 GeoTools 函式庫在資料擷取過程中評估屬性名稱。
- 這
共通-jxpath
函式庫,用於處理 XPath 表達式,缺乏適當的驗證,在處理 XPath 表達式時可能執行任意程式碼。 - 此漏洞使所有 GeoServer 實體暴露於潛在的 RCE 漏洞,因為攻擊者可以製作惡意請求,利用此不安全的 XPath 執行來控制伺服器。
開發工作流程概述
- 一個
職位
請求被傳送到GetPropertyValue
操作。然後,GeoServer 嘗試擷取該屬性(或值參考
) 為一個給定的特徵。 - 如果請求的屬性存在於地物類型詳細資料表中,GeoServer 會正常處理該屬性。
- 但是,如果沒有列出該屬性,GeoServer 會返回到
共通-jxpath
函式庫將請求參數詮釋為 XPath 表達式。 - 自
共通-jxpath
允許直接從 XPath 執行 Java 程式碼,這個回退機制可能會讓使用者提供的請求參數被利用來執行遠端程式碼。簡單來說,攻擊者可以注入惡意程式碼來達成 RCE。
漏洞開發與分析
JXPath 與 Java 執行橋接器
這 共通-jxpath
函式庫,通常稱為 JXPath,可讓您使用 XPath 語法瀏覽 Java 物件圖形 (JavaBeans、DOM 物件等)。舉例來說,如果您有一個簡單的 Employee 物件,其中有姓名和地址等屬性,JXPath 可讓您像查詢 XML 檔案中的節點一樣查詢這些屬性。
開發擴充功能
除了標準函數之外,JXPath 也支援延伸函數,作為連結 Java 的橋梁。這個「Java 橋樑」非常重要,因為它允許在 XPath 查詢中直接呼叫 Java 函式:
由於可透過此橋接器呼叫的 Java 方法限制不多,因此攻擊者可利用 exec()
函數 (或類似的方法) 在伺服器上執行任意指令。
WFS GetPropertyValue
GeoServer 的 WFS 可讓使用者查詢和操作地理空間特徵。在正常情況下,WFS GetPropertyValue
作業只會以 XML 結構傳回所要求的屬性。


工作流程分析
- 攻擊者傳送 POST 請求到 /geoserver/wfs。
- GeoServer 檢查最外層的 XML 標籤
wfs:GetPropertyValue-
來決定執行哪個作業。 - 然後,GeoServer 將請求參數委託給 WFS 類中的相應方法。在這種情況下,Dispatcher 會將請求直接指向
GetPropertyValue
方法。
- 在 DefaultWebFeatureService20 (WFS) 類中,此
GetPropertyValue
方法會將使用者的參數轉寄給同名的處理程式。 - 處理者的
執行()
方法收到請求,包括關鍵的值參考
參數由使用者控制。
- 期間
執行()
方法,GeoServer 會檢索參考值
並調用其評估()
功能。
- 如果
值參考
與 GeoServer 預定義的屬性不一致時,GeoServer 會將其預設為功能屬性繼承者
,它解釋值參考
作為 XPath 表達式。
- 這
獲得()
FeaturePropertyAccessor 中的方法使用共通-jxpath
來執行 XPath 查詢。在此,使用者的值參考
會直接傳入 xpath 參數,而不經過驗證。透過JXPathContext.newContext()
,GeoServer 會初始化 XPath 查詢的環境,然後透過iteratePointers()
.
由於 JXPath 支援擴充函式,攻擊者可以在 XPath 表達式中注入惡意程式碼,在 GeoServer 實體上引發任意程式碼執行。
這一連串的事件顯示了如何不安全地處理 值參考
參數會導致 RCE,對易受攻擊的 GeoServer 部署造成嚴重的安全威脅。
模擬攻擊
為了模擬在真實世界情境中的開發,我們的OPSWAT 畢業研究員將 GeoServer 部署在本地 Windows 機器上。存取 GeoServer 時會顯示以下介面。
一旦伺服器開始執行,攻擊者可透過以下方式利用漏洞:傳送含有惡意 XPath 表達式的 POST 請求 值參考
到 /geoserver/wfs 端點。
結果:傳送要求後,惡意 XPath 表達式會執行系統指令,並觸發計算機應用程式的啟動。
緩解措施與建議
一個簡單的漏洞攻擊就可能升級為軟體供應鏈攻擊,尤其是在依賴 GeoServer 等開放原始碼軟體的專案中。OPSWAT SBOM(軟體物料清單)技術有助於識別程式碼庫中的漏洞,例如 CVE-2024-36401。
本範例說明OPSWAT SBOM:
- 偵測受漏洞影響的軟體元件。
- 評估安全漏洞的嚴重性並將其排序 - 在此,GeoServer CVE 被標記為 "Critical"。
- 識別受影響的版本。
- 建議固定版本,以便開發團隊能及時套用修補程式或採取修復措施。
其他建議步驟
- 更新 GeoServer:升級至已修補漏洞的 GeoServer 版本 2.25.2、2.24.4 或 2.23.6(或更新版本)。
- 稽核依賴: 定期使用OPSWAT SBOM 等工具找出過時的程式庫 (例如、
共通-jxpath
) 在您的環境中。 - 限制存取:將 GeoServer 部署在防火牆或驗證層之後,以盡量減少攻擊面。
- 監控安全公告:密切注意官方 GeoServer 發行公告與 CVE 資料庫,隨時更新新的修補程式。
關於OPSWAT SBOM
OPSWAT SBOM 支援最熱門的程式語言,提供軟體開發團隊對第三方開放原始碼程式庫、其相關相依性以及最新可用升級版本的可視性。開發人員可將OPSWAT SBOM 整合至其原始碼與容器服務,例如 GitHub、BitBucket、GitLab、Amazon ECR、DockerHub 等。進一步瞭解 SBOM。
立即與專家討論,瞭解如何將OPSWAT 工具和解決方案與您現有的基礎架構和工作流程整合: