Apache HertzBeat <1.6.0 SnakeYaml反序列化漏洞(CVE-2024-42323)

漏洞描述:

HertzBeat 是一个易用友好的开源实时监控告警系统,无需 Agent,高性能集群,兼容 Prometheus,提供强大的自定义监控和状态页构建能力。
受影响版本中未对用户可控的 yaml 文件有效过滤,经过身份验证的攻击者可构造恶意的 yaml 文件远程执行任意代码。

环境搭建:

下载源码本地部署
https://github.com/apache/hertzbeat/archive/refs/tags/v1.5.0.zip
后端环境,导入idea中maven加载依赖直接运行即可:

前端环境,需要nodejs npm ng,在web-app文件夹下先后执行npm install
ng serve --open启动前端环境:


登录后台:

漏洞分析:

这里直接全局搜yaml.load(),往回追溯调用

依赖也是符合漏洞版本的:

全局搜索parseImport调用,发现在org.dromara.hertzbeat.manager.service.impl.AbstractImExportServiceImpl#importConfig中有调用,这是org.dromara.hertzbeat.manager.service.impl.YamlImExportServiceImpl所实现的抽象类,直接搜importConfig调用,发现有两个controller层的调用:

先看org.dromara.hertzbeat.manager.controller.MonitorsController#export(org.springframework.web.multipart.MultipartFile),http接口为api/monitors/import

代码很简单,直接调用org.dromara.hertzbeat.manager.service.impl.MonitorServiceImpl#importConfig,来判断上传文件后缀名,这里若传入的是.yaml,则type为YAML

再从imExportServiceMap取imExportService对应的实现类,去调用相应方法

这样整个线就串上了

调试一下:

这里参考https://github.com/artsploit/yaml-payload 上传yaml文件:


另外一条路由也是同样的利用方式,就不具体分析了,直接贴出相关代码:
org.dromara.hertzbeat.alert.controller.AlertDefinesController#importDefines

org.dromara.hertzbeat.alert.service.impl.AlertDefineServiceImpl#importConfig

org.dromara.hertzbeat.alert.service.impl.AlertDefineAbstractImExportServiceImpl#importConfig

org.dromara.hertzbeat.alert.service.impl.AlertDefineYamlImExportServiceImpl#parseImport

总的来说漏洞并不复杂,引用了不安全的第三方组件并且入口可控,唯一美中不足的是需要权限去RCE

参考

https://github.com/artsploit/yaml-payload
0 条评论
某人
表情
可输入 255