menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right (CVE-2019-17564)Apache Dubbo 反序列化漏洞 chevron_right (CVE-2019-17564)Apache Dubbo 反序列化漏洞.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    (CVE-2019-17564)Apache Dubbo 反序列化漏洞.md
    3.52 KB / 2021-07-15 19:47:52
        (CVE-2019-17564)Apache Dubbo 反序列化漏洞
    ===========================================
    
    一、漏洞简介
    ------------
    
    `Apache Dubbo`支持多种协议,推荐官方使用`Dubbo`协议。`Apache Dubbo HTTP`协议中的一个反序列化漏洞(CVE-2019-17564),漏洞该主要原因的在于当`Apache Dubbo`启用`HTTP`协议之后,`Apache Dubbo`对消息体处理不当导致不安全反序列化,当项目包中存在可用的`gadgets`时即可导致远程代码执行。
    
    二、漏洞影响
    ------------
    
    2.7.0 \<= Apache Dubbo \<= 2.7.4.12.6.0 \<= Apache Dubbo \<= 2.6.7Apache Dubbo = 2.5.x
    
    三、复现过程
    ------------
    
    -   1.环境建设
    
    为了环境搭建方便,访问`dubbo-samples`的github项目主页(https://github.com/apache/dubbo-samples)
    
    下载源码以后,分离出http部分
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId24.png)
    
    修改pom.xml中32行`dubbo.version`
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId25.png)
    
    修改其为漏洞版本,以2.7.3为例,随后在Idea中开启即可修改JDK版本为1.8
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId26.png)
    
    随后导入一个可控的gadgets用于分析,例如`commons-collections4-4.0`,并启动`HttpProvider`
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId27.png)
    
    ##### 注:Dubbo启动依赖zookeeper,这部分使用不再赘述,请自行查阅google
    
    -   2.漏洞分析
    
    我们进入`org.apache.dubbo.remoting.http.servlet.DispatcherServlet`在43行`handler.handle(request, response);`处打入断点,利用burp进行发包跟踪它的走向
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId29.png)
    
    随后发现其进入`org.apache.dubbo.rpc.protocol.http.HttpProtocol`中的`handle`
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId30.png)
    
    进一步跟踪
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId31.png)
    
    最终进入`org.springframework.remoting.rmi.RemoteInvocationSerializingExporter`
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId32.png)
    
    该ois对象来源为报文中post
    data部分,对于传入的ois并没有做任何安全过滤和检查,直接就行了`readObject`方法导致RCE产生.
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId33.png)
    
    很多人不太理解Java反序列化漏洞怎么rce,这里给出一段示例代码
    
    使用`ysoserial`随意生成一个序列化文件,再利用下面的代码读取该序列化文件即可达到效果,可见直接使用`readObject`方法的危害
    
        import java.io.FileInputStream;
        import java.io.ObjectInputStream;
    
        public class test1 {
            public test1() {
            }
    
            public static void main(String[] args) throws Exception {
                FileInputStream fis = new FileInputStream("/Users/xue/Documents/NetSafe/Tools/JavaTools/1.ser");
                ObjectInputStream ois = new ObjectInputStream(fis);
                ois.readObject();
            }
        }
    
    -   3.漏洞复现
    
    ysoserial下载地址:http://wiki.0-sec.org/download/ysoserial.zip
    
    利用ysoserial生成payload
    
        java -jar ysoserial-master-30099844c6-1.jar CommonsCollections4 "calc" > payload.out
    
    将payload粘贴至burp中
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId34.png)
    
    ![](./resource/(CVE-2019-17564)ApacheDubbo反序列化漏洞/media/rId35.gif)
    
    参考链接
    --------
    
    > https://qiita.com/shimizukawasaki/items/39c9695d439768cfaeb5
    >
    > https://www.cnblogs.com/wh4am1/p/12307848.html
    
    
    links
    file_download