从HertzBeat聊聊SnakeYAML反序列化

💡 原文中文,约7600字,阅读约需18分钟。
📝

内容提要

上周日与@Ar3h师傅在代码审计知识星球发布了Springboot挑战,探讨PSQL JDBC注入漏洞的离线利用。文章分为两部分:第一部分介绍Apache Hertzbeat的反序列化漏洞,第二部分讨论挑战的预期与非预期答案。Hertzbeat使用SnakeYAML解析YAML,存在反序列化漏洞,作者分析了漏洞历史及利用链,并提出了离线利用方法。最终,Hertzbeat在新版本中修复了该漏洞。

🎯

关键要点

  • 与@Ar3h师傅在代码审计知识星球发布Springboot挑战,探讨PSQL JDBC注入漏洞的离线利用。

  • 文章分为两部分:第一部分介绍Apache Hertzbeat的反序列化漏洞,第二部分讨论挑战的预期与非预期答案。

  • Apache Hertzbeat是一个开源的实时监控告警工具,使用SnakeYAML解析YAML,存在反序列化漏洞(CVE-2022-1471)。

  • 反序列化漏洞的利用链需要满足版本<2.0且未使用SafeConstructor。

  • SnakeYAML反序列化漏洞的历史可以追溯到2017年,Moritz Bechler的marshalsec项目首次提出。

  • SnakeYAML的作者拒绝承认该漏洞,直到2022年才被申请CVE编号。

  • 作者分析了多种利用链,包括需要连接外网的payload和不需要的payload。

  • 通过构造函数调用,SnakeYAML可以在不同Java版本中生效,提供了不出网的利用链。

  • Hertzbeat在v1.4.1版本中修复了该漏洞,但补丁效果有限,最终在v1.6.0版本中通过增加SafeConstructor修复了问题。

  • 文章探讨了如何利用Java函数进行不出网的攻击,提出了多种可能的利用方式。

延伸问答

Apache Hertzbeat的反序列化漏洞是什么?

Apache Hertzbeat的反序列化漏洞是由于使用SnakeYAML解析YAML时,未使用SafeConstructor且版本低于2.0,导致存在CVE-2022-1471漏洞。

SnakeYAML反序列化漏洞的历史背景是什么?

SnakeYAML反序列化漏洞的历史可以追溯到2017年,最早由Moritz Bechler在marshalsec项目中提出,直到2022年才被申请CVE编号。

Hertzbeat是如何修复反序列化漏洞的?

Hertzbeat在v1.4.1版本中进行了初步修复,但效果有限,最终在v1.6.0版本中通过增加SafeConstructor实现了有效修复。

如何利用SnakeYAML的反序列化漏洞进行攻击?

可以通过构造函数调用和特定的payload实现不出网的攻击,例如利用javax.script.ScriptEngineManager加载本地Jar包。

SnakeYAML与Fastjson的反序列化漏洞有什么相似之处?

SnakeYAML和Fastjson的反序列化漏洞都涉及到利用链的构造,但SnakeYAML无法调用getter,而Fastjson则需要getter来执行某些操作。

反序列化漏洞的利用链需要满足哪些条件?

反序列化漏洞的利用链需要满足版本低于2.0且未使用SafeConstructor,并且可能需要连接外网或使用特定的payload。

➡️

继续阅读