Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

  • A+
所属分类:安全文章

[email protected]卫兵实验室

漏洞复现证明截图

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

影响范围

Oracle Weblogic Server 12.1.3.0, 12.2.1.3, 12.2.1.4

漏洞分析

com.tangosol.util.ExternalizableHelper#readXmlSerializable 会对反序列化读取到的 sXml 传入 (new SimpleParser()).parseXml 进行XML解析。

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

跟进 parseXmlthis.parseDocument(xml) 会把我们传入的xml字符串解析成 XmlDocument 对象

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

如果 this.m_fValidatetrue,则调用 (new SaxParser()).validateXsd(sXml, xml) 验证XML格式,默认情况下为true

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

跟进 validateXsd 方法,最终会调用 validator.validate(source) 触发XXE漏洞,source 就是我们传入的xml的 Source 对象。但是前提是 listSchemaURIs 不为空

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

看一下 listSchemaURIs 的赋值过程

XmlHelper.getNamespacePrefix 获取以 xmlns: 开头的标签属性,返回其后面的字符串做为 prefix

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

XmlHelper.getSchemaLocations 提取 prefix + :schemaLocation:noNamespaceSchemaLocation 的值,按照空白字符分割,每隔两位添加进 listURLs

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

因此我们构造为下面的格式即可让 listSchemaURIs 不为空

<a xmlns:x='http://www.w3.org/2001/XMLSchema-instance' x:schemaLocation='http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc.xsd'/>

跟进 this.resolveSchemaSources(listSchemaURIs)

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

最终会调用 AppCLassLoader 在本地查找uri中的资源文件,而不会从远程加载

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

因此我们需要在本地找一个能够用的xsd文件,我这里用的是 Coherence.jar 中的 coherence-rest-config.xsd ,因此把 http://www.springframework.org/schema/mvc/spring-mvc.xsd 替换为 http://www.springframework.org/coherence-rest-config.xsd 即可。

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

最后还差进到 com.tangosol.util.ExternalizableHelper#readXmlSerializable 中的反序列化入口,同样可以使用CVE-2020-14756的 com.tangosol.coherence.servlet.AttributeHolder readXmlSerializable 对应的nType为9

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

我们可以重写 AttributeHolderwriteExternal 方法,按照反序列化时的读取流程直接写入自定义XML即可。

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

漏洞修复


实例化 SimpleParser 时传入false参数禁止验证XML格式。

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

关于我们

Weblogic T3/IIOP反序列化漏洞(XXE漏洞)分析

人才招聘

二进制安全研究员

(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 T3/IIOP反序列化漏洞(XXE漏洞)分析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: