热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CVE20202555:WebLogicRCE漏洞分析

 0x00 前言不安全的反序列化漏洞已经逐渐成为攻击者/研究人员在面对Java Web应用时寻找的目标。这些漏洞通常能得到可靠的远程代码执行(RCE)效果,并且修复起来比较困难。在本文中,我们将分析C

 

0x00 前言

不安全的反序列化漏洞已经逐渐成为攻击者/研究人员在面对Java Web应用时寻找的目标。这些漏洞通常能得到可靠的远程代码执行(RCE)效果,并且修复起来比较困难。在本文中,我们将分析CVE-2020-2555(ZDI-20-128)漏洞,该漏洞由来自VNPT ISC的Jang提交。这个漏洞级别较高(CVSS评分9.8),存在于Oracle Coherence库中,从而影响使用该库的Oracle WebLogic服务器等常见产品。官方在1月份修复了包括该漏洞在内的300多个漏洞。

 

0x01 补丁分析

漏洞根源存在于某个Java方法中,攻击者可以调用该方法,并且能控制相关参数。在Java中,当重新创建对象图时,类的readObject()readExternal()会被自动调用。因此,这两个方法(以及在方法内部可达的其他方法)可以被视为反序列化gadget的根源点。

CVE-2020-2555的补丁引入了非常有趣的一处修改,涉及LimitFilter类的toString()方法:

补丁在toString()中删除了对extract()方法的所有调用语句,下文中将重点分析extract()方法的重要性。这种修改操作非常有趣,因为我们可以通过各种标准的JRE类(如BadAttributeValueExpException)的readObject()方法,成功访问toString()方法。

如上图所示,经过序列化的BadAttributeValueExpException类实例可以用来调用任意类的toString()方法。这种技术可以用来访问受此补丁影响的LimitFilter类的toString()方法。

关于使用toString()作为入口点的gadget,大家可以参考ysoserial项目的CommonsCollections5 gadget.

 

0x02 寻找sink点

Sink点指的是具有各种副作用的Java方法调用,这类副作用包括:

1、通过调用FileOutputStream.write()实现任意文件创建;

2、通过调用Runtime.exec()实现任意命令执行;

3、通过调用Method.invoke()实现任意方法调用。

对于该漏洞,我们主要关注的是Method.invoke(),该调用能通过反射来调用任意Java方法。了解该信息后,我们开始查找具备extract()方法的所有实例(根据前文分析,该方法正是补丁分析后我们得出的根源点),并且最终会调用Method.invoke()。在Coherence库中,似乎只有一个可序列化类(实现Serializable或者Externalizable接口)实例满足条件。

观察ReflectionExtractor类后,我们可以进一步确认前面的猜测:

ReflectionExtractor提供了一种较为危险的操作原语,可以让攻击者调用任意方法,并且攻击者可以控制具体方法及相关参数。

 

0x03 实现RCE

通常情况下,攻击者需要调用多个方法才能实现RCE。比如,在常见的Apache Commons Collections gadget中,攻击者需要使用ChainedTransformer将任意方法调用串接起来,从而实现RCE。与此类似,Coherence库中也提供了这样一个类(ChainedExtractor),可以让我们串接extract()调用:

将以上信息结合起来,我们可以使用如下调用链,最终实现远程代码执行:

因此,如果有目标环境使用了Coherence库,并且攻击者可以投递恶意序列化对象,那么攻击者就能实现远程代码执行。为了演示攻击环境,这里我们以WebLogic的T3协议作为目标,具体操作过程可参考此处视频。

 

0x04 总结

自从Chris Frohoff和Gabriel Lawrence在AppSecCali提出Java反序列化相关概念后,研究人员就一直在寻找反序列化漏洞,以实现可靠的代码执行。在针对SCADA应用的Pwn2Own Miami活动中,我们已经收到了多个这类报告,这也是我们在相关报告中特别关注反序列化问题的原因之一。


推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
author-avatar
拍友2502891813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有