问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
Apache HertzBeat反序列化
漏洞分析
Apache HertzBeat 是开源的实时监控工具,受影响版本中未对用户可控的 Yaml 文件有效过滤,经过身份验证的攻击者可构造恶意 Yaml 文件远程执行任意代码。
### 简介 [Apache HertzBeat](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fapache%2Fhertzbeat) (incubating)是一个易用友好的开源实时监控告警系统,无需 Agent,高性能集群,兼容 Prometheus,提供强大的自定义监控和状态页构建能力。 ### 漏洞描述 Apache HertzBeat 是开源的实时监控工具。受影响版本中由于使用漏洞版本的 SnakeYAML v1.32解析用户可控的 yaml 文件,经过身份验证的攻击者可通过 /api/monitors/import、/api/alert/defines/import 接口新增监控类型时配置恶意的 yaml 脚本远程执行任意代码。 ### 影响版本 1.6.0版本之前 ### 环境搭建 下载源码:<https://github.com/apache/hertzbeat/archive/refs/tags/v1.4.4.zip> 环境要求: 后端:maven3+, java17, lombok 前端:nodejs npm angular-cli 解压之后找到manager目录下的Manager启动后端代码: ![image-20241009204204053.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-7004919ff6cb51f39016731f29a996b17b882b52.png) 启动前端: 在web-app目录下安装依赖 ![image-20241009204357006.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-bcd65c585c25615784ccd966121ec70956ea4792.png) 运行ng serve --open 启动前端页面 ![image-20241009204428742.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-3bf29a0b5860a4a1a1ba01742ed191a70aa3ef45.png) 访问:<http://localhost:4200/dashboard>,默认密码admin/hertzbeat ![image-20241009204515179.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-84f4bbd9ff29ba363dc4970ff68a2872f7f824f1.png) ### 漏洞分析 首先看/api/monitors/import接口,定位到MonitorsController#export,调用MonitorService#importConfig方法处理传入的文件 ![image-20241009134011741.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-b8271f9e486b9970a6dbdf861bc217044e027ee7.png) 调用MonitorServiceImpl#importConfig处理文件,根据文件名后缀,判断文件类型,根据不同的文件类型调用不同的函数处理。如果上传yaml格式的文件,则获取YamlImExportServiceImpl的type,然后根据type获取imExportServiceMap中对应的imExportService ![image-20241009191801717.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-0928a8a4b5e0d93582c046bc4eff6b9d24c4960b.png) 那么imExportServiceMap是在哪赋值的?追溯可以发现是构造函数初始化了imExportServiceMap,将 imExportServiceList 中的每个服务按照其类型存入imExportServiceMap中。 ![image-20241009194506732.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-3c7d86934c51e3eb09b9dd85e6f85fd25974a3ae.png) 在Spring 中会自动扫描并注入所有实现了 ImExportService 接口的 Bean 并将其作为参数传递给构造函数。这样imExportServiceMap 会在 Bean 初始化时自动填充,查看所有实现ImExportService 的接口: ![image-20241009195055328.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-751a62e15097c67fbad68aea7164d56f3ec64152.png) 接着调用imExportService.importConfig方法,此时imExportService为YamlImExportServiceImpl,并且YamlImExportServiceImpl继承AbstractImExportServiceImpl类 ![image-20241009195445284.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-550ae06d2b008e34235f3c2f71a7d194199b8c3d.png) 所以查看AbstractImExportServiceImpl#importConfig方法,在该方法中调用parseImport方法处理上传的文件 ![image-20241009195532223.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-e72f3aa40f084ef715d7d57ae991cec5acbca8f2.png) 跟进到YamlImExportServiceImpl#parseImport方法,经典的SnakeYaml反序列。 ![image-20241009201256530.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-28c5d2f38bf7da33ae3bfd827fdbdd47d39b1156.png) 查看组件版本也是符合反序列化条件的 ![image-20241009201435524.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-73abbf6a4a189bc5365068f685adad63f3510bd1.png) ### 漏洞复现 访问<http://localhost:4200/>,admin/hertzbeat登录后台,选择任何监控点击导入监控 ![image-20241009211426283.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-14fa1f0bead4238cbc03b9227df259339d6ef28c.png) 修改上传yaml文件中的value值: ![image-20241009211949488.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-6e49c01b2d19e8e237eb54ae9348b248c278d880.png) 成功执行代码 ![image-20241009211904763.png](https://shs3.b.qianxin.com/attack_forum/2024/10/attach-16023c1d2a335e71a6aa18d0d8511597a3220330.png) ### 参考 <https://github.com/apache/hertzbeat/commit/88a843612d0702bd82729526aa28d784874c37c9#diff-8e8715de7d4daf4470f78dbaf8eaf67ad803ddd7c74ccfadfe6b1d799ff8721bR96>
发表于 2024-10-23 10:00:01
阅读 ( 991 )
分类:
Web应用
0 推荐
收藏
0 条评论
请先
登录
后评论
买橘子
3 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!