在本博客中,我们将探讨在 GeoServer 中发现的 CVE-2024-36401 安全漏洞,GeoServer 是一个基于 Java 的开源服务器,广泛用于地理空间数据操作和共享。该漏洞可能允许未经身份验证的用户执行 RCE(远程代码执行),这凸显了尽快为 GeoServer 部署打补丁的极端重要性。
在我们最新的安全分析中,两名OPSWAT 研究生通过以下方式调查了这一威胁:
- 深入研究 CVE 的攻击向量
- 找出攻击者可用于利用 GeoServer 的安全漏洞
- 模拟攻击者如何入侵GeoServer 部署
我们还将分享OPSWAT SBOM 技术如何检测到这一漏洞,并为团队提供可行的步骤,在攻击者发动攻击之前确保地理空间基础设施的安全。

GeoServer 概览
GeoServer是一个基于 Java 的开源服务器,设计用于查看、编辑和共享地理空间数据。GeoServer 最初由 TOPP(开放式规划项目)于 2001 年推出,旨在通过开放式空间数据交换提高公众对政府和城市规划的参与度。二十多年过去了,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(危急)。
GeoServer 的简单与复杂功能对比
GeoServer 支持简单和复杂的特征类型,以适应从平面到复杂嵌套数据集的不同地理空间数据结构。然而,这些数据类型的 XPath 表达式处理存在缺陷,使得 CVE-2024-36401 成为可利用的漏洞。
简单功能
简单特征类型以平面格式表示直接的地理空间数据,数据库中的每一行都对应一个地理空间特征;每个属性都直接映射到一个 XML 元素。
例如,包含 id、名称和位置等列的公司表可以很容易地转换成简单的 XML 功能。
本我 | 名字 | 地点 |
1 | OPSWAT | 点(10.769829,106.685248) |
建筑群特点
相比之下,复杂特征类型可处理更复杂的数据。这种特征类型支持嵌套属性和不同数据集之间的关系。这些复杂的模式不是自动生成的,而是按照 GeoServer 的应用模式扩展中概述的社区标准定义的。
例如
在之前的公司表下,我们添加了一个外键 gu_id
来描述公司与其相应地质单元之间的关系:
本我 | 名字 | 地点 | gu_id |
1 | OPSWAT | 点(10.769829,106.685248) | 12 |
地质单元信息单独存储在表 地质单元
:
gu_id | 瓮 | 描述 |
12 | urn:x-demo:feature:GeologicUnit:12 | 变质片麻岩 |
通过使用这些表格,我们可以将公司映射到 sa:SamplingCompany
,其中包含一个嵌套的 gsml:地质单元
.这种设置创建了一个复杂的功能,因为它涉及到由社区规范而不是自动生成的模式所定义的嵌套类型和关系。
这种灵活性对于模拟复杂的现实世界场景至关重要,但也会带来一些漏洞,因为它依赖于高级处理技术(如 JXPath 评估)来有效管理嵌套结构。
漏洞是如何产生的
GeoServer 设计用于使用 XPath 评估来处理复杂的特征类型(如 Application Schema 数据存储中的特征类型)。但由于处理不当,它也错误地将 XPath 评估应用于简单的特征类型。这就产生了一个攻击向量,因为
- GeoServer 依靠 GeoTools 库在数据检索过程中评估属性名称。
- "(《世界人权宣言》)
共用-jxpath
库缺乏适当的验证,在处理 XPath 表达式时可执行任意代码。 - 这一漏洞使所有 GeoServer 实例都面临潜在的 RCE 漏洞,因为攻击者可以制作恶意请求,利用这种不安全的 XPath 执行来控制服务器。
开发工作流程概述
- A
职位
请求被发送到获取属性值
操作。然后,GeoServer 会尝试检索该属性(或值参考
)为一个给定的特征。 - 如果请求的属性存在于地物类型详细信息表中,GeoServer 将正常处理该属性。
- 但是,如果该属性未被列出,GeoServer 会返回到
共用-jxpath
库将请求参数解释为 XPath 表达式。 - 因为
共用-jxpath
由于允许直接从 XPath 执行 Java 代码,这种回退机制有可能使用户提供的请求参数被用于远程代码执行。简单地说,攻击者可以注入恶意代码来实现 RCE。
漏洞开发与分析
JXPath 和 Java 执行桥
"(《世界人权宣言》) 共用-jxpath
JXPath 库(通常称为 JXPath)可以使用 XPath 语法导航 Java 对象图(JavaBeans、DOM 对象等)。例如,如果您有一个简单的雇员对象,其中包含姓名和地址等属性,JXPath 可让您像查询 XML 文档中的节点一样查询这些属性。
利用扩展功能
除了标准函数外,JXPath 还支持作为 Java 桥梁的扩展函数。这种 "通向 Java 的桥梁 "至关重要,因为它允许在 XPath 查询中直接调用 Java 函数:
由于通过该网桥调用 Java 方法的限制很少,攻击者可以利用 exec()
函数(或类似方法)在服务器上执行任意命令。
WFS GetPropertyValue
GeoServer 的 WFS 使用户能够查询和操作地理空间特征。在正常情况下,WFS 获取属性值
操作只会以 XML 结构返回所请求的属性。


工作流程分析
- 攻击者向 /geoserver/wfs 发送 POST 请求。
- GeoServer 会检查最外层的 XML 标记--"......"。
wfs:GetPropertyValue-
来决定运行哪个操作。 - 然后,GeoServer 会将请求参数委托给 WFS 类中的相应方法。在这种情况下,调度程序会将请求指向
获取属性值
方法。
- 在 DefaultWebFeatureService20(WFS)类中,该
获取属性值
方法将用户参数转发给同名处理程序。 - 处理程序的
运行()
方法收到请求,包括关键的值参考
参数由用户控制。
- 在
运行()
方法,GeoServer 会检索参考值
并调用其评估()
功能。
- 如果
值参考
与 GeoServer 的预定义属性不匹配时,GeoServer 会将其默认为特征属性加法器
它解释了值参考
作为 XPath 表达式。
- "(《世界人权宣言》)
获取()
方法使用共用-jxpath
来执行 XPath 查询。在这里,用户的值参考
会直接传入 xpath 参数,无需验证。通过JXPathContext.newContext()
,GeoServer 会为 XPath 查询初始化一个环境,然后通过iteratePointers()
.
由于 JXPath 支持扩展函数,攻击者可在 XPath 表达式中注入恶意代码,从而在 GeoServer 实例上触发任意代码执行。
这一连串的事件表明了如何不安全地处理 值参考
参数会导致 RCE,对脆弱的 GeoServer 部署构成严重的安全威胁。
模拟攻击
为了在现实世界中模拟这种利用,我们的OPSWAT 研究生研究员在本地 Windows 机器上部署了 GeoServer。访问 GeoServer 时会显示以下界面。
服务器运行后,攻击者可通过以下方式利用该漏洞:发送带有恶意 XPath 表达式的 POST 请求。 值参考
到 /geoserver/wfs 端点。
结果:请求发送后,恶意 XPath 表达式会执行系统命令并触发计算器应用程序的启动。
缓解措施和建议
一个简单的漏洞利用可能升级为软件供应链攻击,尤其是在依赖 GeoServer 等开源软件的项目中。OPSWAT SBOM(软件 物料清单)技术有助于识别代码库中的 CVE-2024-36401 等漏洞。
本例演示了OPSWAT SBOM:
- 检测受漏洞影响的软件组件。
- 对安全漏洞的严重性进行评估和评级--在这里,GeoServer CVE 被标记为 "严重"。
- 标识受影响的版本。
- 推荐固定版本,以便开发团队及时打补丁或采取补救措施。
其他建议步骤
- 更新 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 工具和解决方案与您现有的基础设施和工作流程相结合: