背景

近日,Apache Dubbo披露了Provider默认反序列化远程代码执行漏洞(CVE-2020-1948),攻击者可构造恶意请求,从而执行任意代码。具体信息如上图所示。

在官方邮件中,漏洞报告者还提供了官方的PoC脚本,感兴趣的读者可以自行抓包和学习。本文旨在复现漏洞,找出漏洞利用条件,提出漏洞修复方案。

dubbo基础知识 简 介

是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

 序列化协议既然是远程过程调用,那必然会使用到Java的序列化和反序列化。Dubbo支持多种序列化协议,包括:

1. dubbo 序列化

2. hessian2 序列化

3. json 序列化

4. Java 序列化

由于本文不是序列化相关文章,所以这里对这四种序列化方式不做过多解释,只着重科普一下hessian2 序列化协议。

➤  hessian2反序列化攻击利用分析 gadget分析

在marshalsec工具中,有4种针对该协议的gadgets:

1. SpringCompAdv 2. Resin3. ROME4. XBean

在复现过程中,我们使用了rometools,所以这里只分析ROME,其他几种方式会陆续分析。

➤  ROME分析

① 常规触发条件(EqualsBean/ToStringBean)

1. 创建一个 EqualBean 对象,设置其obj属性为一个 ToStringBean 的实例;将 ToStringBean 实例的beanClass,obj属性设置为 JdbcRowSetImpl。2. 将最终的对象插入进一个集合中(此时会调用 hashCode() )。3. 调用EqualBean的hashCode() 方法,触发EqualBean obj属性的 toString() 方法,这里即 ToStringBean 的 toString() 方法。4. 此 toString() 方法会调用其beanClass字段中全部 getter 方法,这里即是JdbcRowSetImpl 。其中getDatabaseMetaData() 方法会调用 connect() 方法,即通过 lookup方式触发了RCE。注: JNDI注入参照参考链接5。② 触发代码(参照链接3)

③ 触发命令执行分析在1中总结了常规的触发条件,可以根据这个条件来编写如下EXP,为了进一步说明1中的常规触发条件跟踪调试一下该EXP,调用栈如下:

1. hessian2在处理map反序列化时调用了 MapDeserializer.java 的 readMap() 方法Dubbo

2. 在 readMap() 方法中又调用了hashMap的 put() 方法

3. 在 put() 方法中调用 hash(key) ,该函数会计算对象的hash,即调用了 EqualBean 的 hashCode() 方法。而此方法又会调用obj的 toString() 方法,即调用了 ToStringBean 中的 toString() 方法。

4. 在 toString() 方法中又调用了 beanClass 的全部getter方法,即调用了 JdbcRowSetImpl 中全部的getter方法。

5. 调用 JdbcRowSetImpl 中的 getDatabaseMetaData() 方法,进而调用 connect() 方法。

以上即是ROME Gadget的利用链。

环境搭建 ● ○ 环境搭建主要有两种:1. 如链接1所示,构建 Dubbo Provider 和恶意的 Dubbo Consumer 。2. 如链接2所示,使用官方示例 dubbo-spring-boot-auto-configure-provider-sample 。这里为了方便,我使用的第一种环境搭建方式。复现过程 ● ○

复现步骤如下:

1. 下载文件。其中 DubboModules 为服务提供方, dubboconsumer 为服务消费方,此项目使用JDK8,且为了能 够使用ldap来进行JNDI注入,也需要选取指定版本的JDK8,否则可能导致复现不成功。

2. 导入idea中,这一步直接打开项目即可,但有些可能会遇到 Spring 配置文件相关问题,就需要各位自己踩坑了。

3. 开启 zookeeper 服务,这一步各位自行谷歌解决,根据自己的配置对 provider.xml 进行修改。

4. 编写恶意Java代码,这里使用百年不变的弹计算器来演示。

5. 编译恶意代码生成class文件,需要使用被攻击的目标Dubbo同样JDK版本进行编译。

6. 启动http服务,此时应该启动http服务的目录应为恶意class文件所在的目录

7. 启动ldap服务,这里为了方便使用 marshalsec这里有几个点需要注意:

1. 8000为启动的HTTP服务监听的端口

2. EvilObject为恶意class文件的名称

3. 7777为ldap服务的监听端口,应与exp文件中的端口对应

8. 运行恶意消费者,然后弹计算器成功

到此为止,复现了漏洞利用过程。有兴趣的可以使用发现者提供的PoC去体验一波,这里就不过多展开了,发现者的分析为链接6。漏洞利用与修复 ● ○

➤ 漏洞利用总结

整个漏洞利用流程是很典型的反序列化利用流程,利用该类漏洞的难点在于找到gadgets chain。在上述复现过程中,我们构造了完整的服务消费者和服务提供者。根据漏洞报告者的文章,官方Exp如下所示:

在复现过程中,我们通过注册中心获取service信息并用来进行攻击,所以我们实际上是利用了hessian 协议的漏洞,因为该序列化协议自身并没有针对rometools的gadgets的防护。而dubbo出现此次漏洞的原因,根据官方修复可以推断出是现在的版本没有对进入的service方法进行签名之类的验证,所以不用获取注册中心权限以掌握service信息就可以实施攻击。

➤ 漏洞修复建议

  • 升级到dubbo最新版本,但官方提供的修复只是增加反序列化前的service name的判断,如果能控制中间注册中心还是会存在攻击风险。

  • 对hessian协议进行扩展,主流方法就是增加对应的黑名单过滤器,维护一个黑名单,过滤可以触发gadget的类,如下图所示,详情可参照sofa-hessian(链接7)的处理。

编辑: 陈峰卫 审校: 李 东 参考链接● ○

1. https://gist.github.com/OneSourceCat/01277dceba635eefbc010af36d3704d7

2. https://www.mail-archive.com/dev@dubbo.apache.org/msg06544.html

3. https://blog.csdn.net/u011721501/java/article/details/79443598

4. https://www.jianshu.com/p/93c00a391e09

5. https://www.mi1k7ea.com/2019/09/15/%E6%B5%85%E6%9E%90JNDI%E6%B3%A8%E5%85% A5/

6. https://www.tuicool.com/articles/bYRveej

7. https://github.com/sofastack/sofa-hessian

Thanks!

团队简介:

民生科技公司智能云技术部应用安全组,主要负责公司自营业务相关的安全规划、安全建设,保障项目的安全开发和系统的安全运营。

目前团队成员包括:李东,陈峰卫,安战超

rmi远程反序列化rce漏洞_Apache Dubbo Provider默认反序列化远程代相关推荐

  1. rmi反序列化导致rce漏洞修复_企业安全05-Fastjson =1.2.47反序列化RCE漏洞(CNVD-2019-22238)...

    Fastjson <=1.2.47反序列化RCE漏洞(CNVD-2019-22238) 一.漏洞描述 Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 ...

  2. fastjson jar包_Fastjsonlt;=1.2.47反序列化RCE漏洞(CNVD201922238)

    Fastjson <=1.2.47反序列化RCE漏洞(CNVD‐2019‐22238) 一.漏洞描述 Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 ...

  3. Apereo CAS 4.1 反序列化 RCE 漏洞复现实验报告

    演示视频 Apereo CAS 4.1 反序列化 RCE 漏洞_哔哩哔哩_bilibiliBGM:<芳华慢>+<霜雪千年>(by等什么君)https://www.bilibil ...

  4. rmi远程反序列化rce漏洞_Oracle WebLogic 反序列化远程命令执行漏洞预警

    报告编号:B6-2019-041901 报告来源:360-CERT 报告作者:360-CERT 更新日期:2019-04-19 0x00 事件背景 2019年4月17日,国家信息安全漏洞共享平台(CN ...

  5. 比 Windows DNS 蠕虫漏洞更严重!SharePoint 反序列化RCE漏洞详情已发布,速修复

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 安全研究员 Steven Seeley 发布文章,详细分析了 CVE-2020-1147 漏洞的根因以及低权限用户如何可在易受攻击的  ...

  6. Apache Shiro<=1.2.4反序列化RCE漏洞

    版本:Apache Shiro<=1.2.4 介绍:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 漏洞原因:因为shiro对cookie里的r ...

  7. rmi远程代码执行漏洞_微软 Windows DNS Server 远程代码执行漏洞

    安全预警 漏洞:微软 Windows DNS Server 远程代码执行漏洞漏洞编号:CVE-2020-1350威胁程度:高影响范围: Windows Server 2008 for 32-bit S ...

  8. 和远程ip_【漏洞预警】Windows TCP/IP远程执行代码漏洞(CVE202016898)

    2020年10月13日,阿里云应急响应中心监测到微软发布补丁修复了TCP/IP远程执行代码漏洞(CVE-2020-16898),官方评级严重.目前微软官方已提供相应的月度安全补丁以修复该漏洞. 漏洞描 ...

  9. rmi远程代码执行漏洞_Apache Solr反序列化远程代码执行漏洞分析(CVE20190192)

    更多全球网络安全资讯尽在邑安全 www.eansec.com ‍‍‍‍ 0x01 漏洞描述 Solr 是Apache软件基金会开源的搜索引擎框架,其中定义的ConfigAPI允许设置任意的jmx.se ...

最新文章

  1. 命名实体识别NER遗留问题----模型构建
  2. jquery 常见选择器详解3
  3. LeetCode Add Binary(二进制加法)
  4. CentOS-6.9升级到Python-3.5
  5. LeetCode 934. 最短的桥(2次BFS)
  6. 读写自旋锁详解,第 2 部分(来自IBM)
  7. 《ETL原理及应用》学习笔记 ·003【kettle的使用-1】
  8. Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
  9. python direct_Python-RabbitMQ-direct(广播模式)
  10. 计算机游戏软件视频,录屏软件具体怎么使用?记录电脑游戏视频
  11. c和指针(小白笔记)
  12. ActivityManager解析及使用
  13. python的分号用英文还是中文_Python中的分号
  14. android模拟器pc版知乎,知乎答题王电脑版下载 安卓模拟器图文安装教程
  15. 10个提供Logo设计灵感的创意网站
  16. matlab中inf怎么判断,MATLAB中Inf或inf表示()、NaN或nan表示()、nargout表示()。
  17. Android 腾讯优图开发问题总结
  18. surface pro4 win10下安装elementray os双系统教程
  19. Equalize the Array
  20. Parallel Tracking and Verifying: A Framework for Real-Time and High Accuracy(PTAV)论文笔记

热门文章

  1. dbms系统 rdbms_DBMS与传统文件系统之间的区别
  2. python 打印文件名_在Python中打印文件名,关闭状态和文件模式
  3. java输出不同颜色_Java设计模式-策略模式、状态模式
  4. python 获取当前时间再往前几个月_Python 中的时间和日期操作
  5. python mpi开销_GitHub - hustpython/MPIK-Means
  6. python md5加密_Python MD5加密实例详解
  7. css导航栏_使用CSS的导航栏
  8. Java PushbackInputStream skip()方法与示例
  9. 关于Java基础你不得不会的34个问题
  10. PowerDesigner版本控制器设置权限