从HertzBeat聊聊SnakeYAML反序列化
内容提要
上周日与@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。