CVE-2019-17564 FastJson + SpringFramework 利用链(针对 Dubbo 2.7.3)
完整的分析文章可在 https://www.checkmarx.com/blog/apache-dubbo-unauthenticated-remote-code-execution-vulnerability 获取
注意:这并非一个漏洞利用程序;它是一个用于演示在包含特定依赖项的作用域中反序列化的 POC 利用链。
概述
用于创建阿里巴巴 FastJson + Spring 利用链的基本代码,该链被用于在 CVE-2019-17564 中利用 Apache Dubbo。此代码将打印并本地反序列化一个基于 Dubbo 2.7.3、Dubbo Common 2.7.3 和 Spring Framework 作用域内可用依赖项的利用链。
利用链结构
- HashMap.putVal(h,k,v)
a. 对于 HotSwappableTargetSource 对象,hashCode() 的结果 h 是相同的,当插入第二个值时,会触发对 HashMap 键的更深入的 equals() 调用。
- HotSwappableTargetSource.equals()
- XString.equals()
- com.alibaba.fastjson.JSON.toString()
- com.alibaba.fastjson.JSON.toJSONString()
- com.alibaba.fastjson.serializer.MapSerializer.write()
- TemplatesImpl.getOutputProperties()
- TemplatesImpl.newTransformer()
- TemplatesImpl.getTransletInstance()
- TemplatesImpl.defineTransletClasses()
- ClassLoader.defineClass()
- Class.newInstance()
- MaliciousClass.()
- Runtime.exec()
致谢
感谢 Chris Frohoff 和 Moritz Bechler 的研究和工具(ysoserial 和 marshalsec),因为他们的部分代码被用于该利用链,并且他们的研究为这个漏洞利用奠定了基础。
同样感谢 Checkmarx,他们支持了这类研究,以及我们出色的研究小组,他们提出了想法、进行了审阅,并忍受了我对这类话题喋喋不休的事实。