人工智能黑客--黑客如何在网络攻击中使用人工智能

立即阅读
我们利用人工智能进行网站翻译,虽然我们力求准确,但不一定总是 100%精确。感谢您的理解。

开源 GeoServer 中的 CVE-2024-36401 漏洞使系统面临远程代码执行风险

OPSWAT
分享此贴
OPSWAT 研究金计划参与者的大头照
OPSWAT 研究金计划参与者

在本博客中,我们将探讨在 GeoServer 中发现的 CVE-2024-36401 安全漏洞,GeoServer 是一个基于 Java 的开源服务器,广泛用于地理空间数据操作和共享。该漏洞可能允许未经身份验证的用户执行 RCE(远程代码执行),这凸显了尽快为 GeoServer 部署打补丁的极端重要性。 

在我们最新的安全分析中,两名OPSWAT 研究生通过以下方式调查了这一威胁:

  • 深入研究 CVE 的攻击向量 
  • 找出攻击者可用于利用 GeoServer 的安全漏洞 
  • 模拟攻击者如何入侵GeoServer 部署 

我们还将分享OPSWAT SBOM 技术如何检测到这一漏洞,并为团队提供可行的步骤,在攻击者发动攻击之前确保地理空间基础设施的安全。

表示 GeoServer 漏洞分析的插图

GeoServer 概览

GeoServer是一个基于 Java 的开源服务器,设计用于查看、编辑和共享地理空间数据。GeoServer 最初由 TOPP(开放式规划项目)于 2001 年推出,旨在通过开放式空间数据交换提高公众对政府和城市规划的参与度。二十多年过去了,GeoServer 已经发展成为一个强大的平台,能够处理各种空间数据格式并与不同的数据源集成。

GeoServer 提供基于OGC(开放地理空间联盟)标准的服务,包括

  • WFS(网络地物服务)--可使用HTTP 创建、修改和交换矢量格式地理信息。 
  • WCS(网络覆盖服务)--方便获取光栅数据(如卫星图像),用于复杂的建模和分析
  • WMS(网络地图服务)--为请求地图图像提供一个简单的 HTTP 接口。

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(危急)。 

用于评估软件漏洞的 CVSS 基本分数指标截图

GeoServer 的简单与复杂功能对比

GeoServer 支持简单和复杂的特征类型,以适应从平面到复杂嵌套数据集的不同地理空间数据结构。然而,这些数据类型的 XPath 表达式处理存在缺陷,使得 CVE-2024-36401 成为可利用的漏洞。

简单功能

简单特征类型以平面格式表示直接的地理空间数据,数据库中的每一行都对应一个地理空间特征;每个属性都直接映射到一个 XML 元素。 

例如,包含 id、名称和位置等列的公司表可以很容易地转换成简单的 XML 功能。

本我名字地点
1OPSWAT点(10.769829,106.685248)
从数据库行到 XML 元素的简单地物映射

建筑群特点

相比之下,复杂特征类型可处理更复杂的数据。这种特征类型支持嵌套属性和不同数据集之间的关系。这些复杂的模式不是自动生成的,而是按照 GeoServer 的应用模式扩展中概述的社区标准定义的。

例如 

在之前的公司表下,我们添加了一个外键 gu_id 来描述公司与其相应地质单元之间的关系:

本我名字地点gu_id
1OPSWAT点(10.769829,106.685248)12

地质单元信息单独存储在表 地质单元:

gu_id描述
12urn:x-demo:feature:GeologicUnit:12变质片麻岩

通过使用这些表格,我们可以将公司映射到 sa:SamplingCompany,其中包含一个嵌套的 gsml:地质单元.这种设置创建了一个复杂的功能,因为它涉及到由社区规范而不是自动生成的模式所定义的嵌套类型和关系。

GeoServer 复杂地貌中的嵌套地质单元关系

这种灵活性对于模拟复杂的现实世界场景至关重要,但也会带来一些漏洞,因为它依赖于高级处理技术(如 JXPath 评估)来有效管理嵌套结构。

漏洞是如何产生的

GeoServer 设计用于使用 XPath 评估来处理复杂的特征类型(如 Application Schema 数据存储中的特征类型)。但由于处理不当,它也错误地将 XPath 评估应用于简单的特征类型。这就产生了一个攻击向量,因为

  1. GeoServer 依靠 GeoTools 库在数据检索过程中评估属性名称。
  2. "(《世界人权宣言》) 共用-jxpath 库缺乏适当的验证,在处理 XPath 表达式时可执行任意代码。
  3. 这一漏洞使所有 GeoServer 实例都面临潜在的 RCE 漏洞,因为攻击者可以制作恶意请求,利用这种不安全的 XPath 执行来控制服务器。

开发工作流程概述

  • A 职位 请求被发送到 获取属性值 操作。然后,GeoServer 会尝试检索该属性(或 值参考)为一个给定的特征。  
  • 如果请求的属性存在于地物类型详细信息表中,GeoServer 将正常处理该属性。
在表格中进行 XPath 评估时,GeoServer 回退至 commons-jxpath
  • 但是,如果该属性未被列出,GeoServer 会返回到 共用-jxpath 库将请求参数解释为 XPath 表达式。
  • 因为 共用-jxpath 由于允许直接从 XPath 执行 Java 代码,这种回退机制有可能使用户提供的请求参数被用于远程代码执行。简单地说,攻击者可以注入恶意代码来实现 RCE。
说明 GeoServer GetPropertyValue 操作和攻击流程的工作流程图

漏洞开发与分析

JXPath 和 Java 执行桥

在 GeoServer 中对恶意 XPath 表达式进行 Commons-jxpath 处理

"(《世界人权宣言》) 共用-jxpath JXPath 库(通常称为 JXPath)可以使用 XPath 语法导航 Java 对象图(JavaBeans、DOM 对象等)。例如,如果您有一个简单的雇员对象,其中包含姓名和地址等属性,JXPath 可让您像查询 XML 文档中的节点一样查询这些属性。

使用 XPath 语法导航 Java 对象图的 JXPath

利用扩展功能

除了标准函数外,JXPath 还支持作为 Java 桥梁的扩展函数。这种 "通向 Java 的桥梁 "至关重要,因为它允许在 XPath 查询中直接调用 Java 函数:

JXPath 查询 Java 雇员对象的属性

由于通过该网桥调用 Java 方法的限制很少,攻击者可以利用 exec() 函数(或类似方法)在服务器上执行任意命令。

连接 XPath 与 Java 方法的扩展函数调用

WFS GetPropertyValue

GeoServer 的 WFS 使用户能够查询和操作地理空间特征。在正常情况下,WFS 获取属性值 操作只会以 XML 结构返回所请求的属性。

返回 XML 属性的 WFS GetPropertyValue 操作
WFS GetPropertyValue XML 响应结构

工作流程分析

  1. 攻击者向 /geoserver/wfs 发送 POST 请求。
  2. GeoServer 会检查最外层的 XML 标记--"......"。wfs:GetPropertyValue-来决定运行哪个操作。
  3. 然后,GeoServer 会将请求参数委托给 WFS 类中的相应方法。在这种情况下,调度程序会将请求指向 获取属性值 方法。
GeoServer 调度器将请求导向 GetPropertyValue 方法
  1. 在 DefaultWebFeatureService20(WFS)类中,该 获取属性值 方法将用户参数转发给同名处理程序。
  2. 处理程序的 运行() 方法收到请求,包括关键的 值参考 参数由用户控制。
处理程序 run() 方法接收带有 valueReference 参数的用户请求
  1. 运行() 方法,GeoServer 会检索 参考值 并调用其 评估() 功能。
GeoServer 检索 referenceValue 并调用 evaluate() 函数
  1. 如果 值参考 与 GeoServer 的预定义属性不匹配时,GeoServer 会将其默认为 特征属性加法器它解释了 值参考 作为 XPath 表达式。
将 valueReference 解释为 XPath 表达式的 FeaturePropertyAccessor
  1. "(《世界人权宣言》) 获取() 方法使用 共用-jxpath 来执行 XPath 查询。在这里,用户的 值参考 会直接传入 xpath 参数,无需验证。通过 JXPathContext.newContext(),GeoServer 会为 XPath 查询初始化一个环境,然后通过 iteratePointers().
使用用户提供的 valueReference 执行 XPath 查询

由于 JXPath 支持扩展函数,攻击者可在 XPath 表达式中注入恶意代码,从而在 GeoServer 实例上触发任意代码执行。

攻击者通过 XPath 表达式为 RCE 注入恶意代码

这一连串的事件表明了如何不安全地处理 值参考 参数会导致 RCE,对脆弱的 GeoServer 部署构成严重的安全威胁。

模拟攻击

为了在现实世界中模拟这种利用,我们的OPSWAT 研究生研究员在本地 Windows 机器上部署了 GeoServer。访问 GeoServer 时会显示以下界面。

用于漏洞模拟的 Windows 机器上的 GeoServer 界面截图

服务器运行后,攻击者可通过以下方式利用该漏洞:发送带有恶意 XPath 表达式的 POST 请求。 值参考 到 /geoserver/wfs 端点。

利用 GeoServer 中的 valueReference 进行恶意 POST 请求的 XML 代码片段

结果:请求发送后,恶意 XPath 表达式会执行系统命令并触发计算器应用程序的启动。

成功利用 RCE 后启动计算器应用程序的屏幕截图

缓解措施和建议

一个简单的漏洞利用可能升级为软件供应链攻击,尤其是在依赖 GeoServer 等开源软件的项目中。OPSWAT SBOM(软件 物料清单)技术有助于识别代码库中的 CVE-2024-36401 等漏洞。

本例演示了OPSWAT SBOM:

  1. 检测受漏洞影响的软件组件。
  2. 对安全漏洞的严重性进行评估和评级--在这里,GeoServer CVE 被标记为 "严重"。
  3. 标识受影响的版本。
  4. 推荐固定版本,以便开发团队及时打补丁或采取补救措施。
OPSWAT SBOM 检测到存在关键漏洞的 GeoServer 软件包的仪表板截图
OPSWAT SBOM软件 材料清单)技术可检测存在关键漏洞的 GeoServer软件 。

其他建议步骤

  1. 更新 GeoServer:升级到已修补漏洞的 GeoServer 版本 2.25.2、2.24.4 或 2.23.6(或更高版本)。
  2. 审计依赖性: 定期使用OPSWAT SBOM 等工具来识别过时的程序库(如......)、 共用-jxpath)在你的环境中。
  3. 限制访问:将 GeoServer 部署在防火墙或身份验证层之后,以尽量减少攻击面。
  4. 监控安全公告:密切关注官方 GeoServer 发行说明和 CVE 数据库,了解新补丁的最新情况。

关于OPSWAT SBOM

OPSWAT SBOM 支持最流行的编程语言,为软件开发团队提供对第三方开源库、其相关依赖性以及最新可用升级版本的可视性。开发人员可将OPSWAT SBOM 集成到他们的源代码和容器服务中,如 GitHub、BitBucket、GitLab、Amazon ECR、DockerHub 等。了解有关 SBOM 的更多信息

立即咨询专家,了解如何将OPSWAT 工具和解决方案与您现有的基础设施和工作流程相结合:

通过OPSWAT 了解最新信息!

立即注册,即可收到公司的最新动态、 故事、活动信息等。