Our full write-up is available at https://www.checkmarx.com/blog/apache-dubbo-unauthenticated-remote-code-execution-vulnerability
Note that this is not an exploit; it is a POC gadget chain used in an exploit used to demonstrate deserialization in scopes containing certain dependencies.
Basic code for creating the Alibaba FastJson + Spring gadget chain, as used to exploit Apache Dubbo in CVE-2019-17564. This code will print, and locally deserialize, a gadget based on dependencies available in the scope of Dubbo 2.7.3, Dubbo Common 2.7.3, and Spring Framework
- HashMap.putVal(h,k,v) a. The result of hashCode(), h, is identical for HotSwappableTargetSource objects, triggering a deeper equals() call on HashMap keys when a second value is inserted
- 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()
Credits are in order to Chris Frohoff and Moritz Bechler for their research and tools (ysoserial and marshalsec), as some of their code was used in the gadget chain, and their research laid the foundation for this exploit.
Credits are also in order to Checkmarx, who enable this type of research, and our fantastic research group for pitching ideas, reviewing, and bearing the fact that I won't shut up about this type of stuff.