Weblogic反序列化漏洞分析(CVE-2021-2135)

admin 2021年7月5日14:50:13评论145 views字数 3134阅读10分26秒阅读模式

Smi1e@卫兵实验室

漏洞复现证明截图

Weblogic反序列化漏洞分析(CVE-2021-2135)

影响范围

Oracle Weblogic Server 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0

漏洞分析

该漏洞依然是对CVE-2020-14756补丁的绕过

Weblogic反序列化漏洞分析(CVE-2021-2135)

com.tangosol.internal.util.SimpleBinaryEntry 的toString方法调用了其自身的 getKey  getValue方法,在这两个方法中会调用ExternalizableHelper.fromBinary(this.m_binKey, this.getContextSerializer())  Binary 对象中的字节数据进行反序列化,且 this.m_binKey 我们可控。

Weblogic反序列化漏洞分析(CVE-2021-2135)

fromBinary 方法最终会调用到 deserializeInternal 方法,这里的 ReadBuffer 对象buf对应我们可控的 Binary 对象 this.m_binKey 。buf.getBufferInput() 会将我们传入的 byte[] 数据转换为 BufferInput 对象,随后会进行反序列化。

Weblogic反序列化漏洞分析(CVE-2021-2135)

readObjectInternal 最终会再次调用到 readExternalizableLite 方法,此时所传入的 DataInput 对象 in  BufferInput 对象,并不是java.io.ObjectInputStream 类的实例对象,因此绕过了黑名单判断。后续反序列化至代码执行的流程参考公众号之前的文章weblogic-T3/IIOP反序列化-远程代码执行-CVE-2020-14756Weblogic反序列化漏洞分析(CVE-2021-2135)

漏洞修复

首先将 com.tangosol.internal.util.SimpleBinaryEntry 加入到了黑名单中。
其次T3反序列化 weblogic.utils.io.FilteringObjectInputStream#resolveClass 在加载类时,会对返回值进行白名单校验,只能是String.class, ServiceContext.class, ClassTableEntry.class, JVMID.class,AuthenticatedUser.class, RuntimeMethodDescriptor.class, Immutable.class这些类的子类或实现类。

Weblogic反序列化漏洞分析(CVE-2021-2135)

Weblogic反序列化漏洞分析(CVE-2021-2135)

另外添加了一个全局白名单 DEFAULT_UNAUTHENTICATED_USER_ALLOWLISTS
private static final String DEFAULT_UNAUTHENTICATED_USER_ALLOWLISTS = "weblogic.rmi.**;weblogic.rjvm.*;weblogic.common.**;weblogic.corba.**;weblogic.cluster.**;weblogic.ejb20.**;weblogic.security.acl.internal.*;weblogic.security.acl.*;weblogic.security.principal.*;weblogic.transaction.*;weblogic.jms.**;weblogic.messaging.dispatcher.*;java.util.*;java.lang.*;!*";
T3反序列化流包装类 ServerChannelInputStream 在初始化时会进行 in.requiresUnauthenticatedFilter() 判断,如果返回true,则会使用全局白名单过滤。不过由于 RMIEnvironment.getEnvironment().isRemoteAnonymousRMIT3Enabled() 返回true,导致默认没有开启。

Weblogic反序列化漏洞分析(CVE-2021-2135)

Weblogic反序列化漏洞分析(CVE-2021-2135)

验证视频



【参考文章】https://xz.aliyun.com/t/9068


关于我们

Weblogic反序列化漏洞分析(CVE-2021-2135)

人才招聘

二进制安全研究员

(Windows内核方向)

岗位职责:

- 负责研究Window内核相关漏洞利用技术;

- 负责分析Window内核漏洞的原理及缓解措施;


任职要求:

- 2年以上windows逆向工作经验。

- 熟悉windows底层架构、运行机制,熟悉汇编语言 C/C++语言,熟悉win32/64开发,并有相关开发经验;

- 熟悉windows驱动开发、熟悉windows平台内核架构;能熟练运用Windows平台下的软件调试方法。

- 熟练使用ida、windbg等调试软件工具调试分析漏洞。

- 有CVE编号、内核研究成果者优先;

- 具备良好的团队沟通、协作能力、良好的职业道德。

二进制安全研究员

(Linux内核方向)

岗位职责:

- 负责研究Linux内核相关漏洞利用技术;

- 负责分析Linux内核漏洞的原理及缓解措施;


任职要求:

- 2年以上Linux逆向工作经验。

- 熟悉Linux底层架构、运行机制,熟悉汇编语言 C/C++语言,熟悉x86/64开发,并有相关开发经验;

- 熟悉Linux驱动开发、熟悉Linux平台内核架构;能熟练运用Linux平台下的软件调试方法。

- 熟练使用ida、gdb、lldb等调试软件工具调试分析漏洞。

- 有CVE编号、内核研究成果者优先;

- 具备良好的团队沟通、协作能力、良好的职业道德。

二进制安全研究员

(系统应用方向)

岗位职责:

- 负责安全技术研究,跟踪国内外最新的安全技术以及安全漏洞的追踪;

- 负责进行二进制漏洞挖掘,包括不限于浏览器、chakara引擎、js引擎、office、pdf等等各种二进制类应用;


任职要求:

- 能主动关注国内外最新安全攻防技术,并在自己擅长和兴趣的领域能够进行深入的学习、研究;

- 熟练掌握windbg、ida、gdb等调试工具;

- 熟悉各类二进制安全漏洞原理(堆溢出、栈溢出、整数溢出、类型混淆等等)以及各种利用技术;

- 能够无障碍阅读英文技术文档;

- 具备良好的团队沟通、协作能力、良好的职业道德。

Web安全研究员

岗位职责:

- 跟踪最新安全技术动态,对高危安全漏洞进行快速分析和响应;

- 负责安全产品的线下、线上功能及流程的验收测试,保证项目进度和品质;

- 从事影响比较大的国内外大型的cms、中间件、框架漏洞挖掘工作


任职要求:

- 深入了解漏洞原理,能够独立挖掘/分析包括但不限于PHP/JAVA/.NET/ASP等大中型应用漏洞,并编写exp;

- 具备优秀的JAVA开发能力,能熟练挖掘 JAVA WEB 方面的漏洞,深入了解tomcat,weblogic,jboss,resin等中间件内部构造;

- 熟练使用至少一门开发语言,如:PHP、python、java;

- 有比较强的开发能力,熟悉java web的常见漏洞原理,有能力挖掘和分析java web方面的漏洞;

- 有重大漏洞发掘或高质量的CVE、0day挖掘能力的优先考虑;

Web安全研究员

(安全测试方向) 


岗位职责:

- 安全攻防技术研究,最新web应用及中间件漏洞挖掘研究;

- 跟踪分析国内外的安全动态,对重大安全事件进行快速响应;

- 针对相关产品,进行全面详细的安全测试评估;


任职要求:

- 了解常见的网络协议(TCP/IP,HTTP,FTP等);

- 熟练使用Wireshark等抓包工具,熟悉正则表达式;

- 掌握常见漏洞原理,有一定的漏洞分析能力;

- 具备php、python、java或其他相关语言编码能力;

- 对常见waf绕过有一定的基础经验;

- 具备一定的文档编写能力,具备良好的团队共同能力;

- 对安全有浓厚的兴趣,工作细致耐心。

本文始发于微信公众号(安恒信息安全研究院):Weblogic反序列化漏洞分析(CVE-2021-2135)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月5日14:50:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Weblogic反序列化漏洞分析(CVE-2021-2135)http://cn-sec.com/archives/413276.html

发表评论

匿名网友 填写信息