《缺陷周话》第四期:XML外部实体注入

CVE-2018-1000548

在版本号小于 14.3 的 Umlet 中,在文件解析中存在XML外部实体注入破绽,可能导致机密数据泄露、回绝办事、办事器端哀求捏造

代码审计是应用静态阐发发明源代码中安然缺陷的措施,能够帮助开拓或测试职员在软件上线前较为周全地懂得其安然问题,防患于未然,是以不停以来都是学术界和财产界钻研的热点,并且已经成为安然开拓生命周期 SDL 和 DevSecOps 等保障体系的紧张技巧手段

360代码卫士团队基于自立研发的海内首款源代码安然检测商用对象,以及十余年破绽技巧钻研的积累,推出“缺陷周话”系列栏目每周针对 CWE、OWASP 等标准中的一类缺陷,结合实例和对象应用进行具体先容,旨在为广大年夜开拓和安然职员供给代码审计的根基性标准化教程

一、XML外部实体注入

XML 外部实体注入破绽也便是我们常说的 XXE 破绽XML 作为一种应用较为广泛的数据传输款式,很多利用法度榜样都包孕有处置惩罚 xml 数据的代码,默认环境下,许多逾期的或设置设置设备摆设摆设欠妥的 XML 处置惩罚器都邑对外部实体进行引用

假如进击者可以上传 XML 文档或者在 XML 文档中添加恶意内容,经由过程易受进击的代码、依附项或集成,就能够进击包孕缺陷的XML处置惩罚器XXE 破绽的呈现和开拓说话无关,只如果利用法度榜样中对 xml 数据做懂得析,而这些数据又受用户节制,那么利用法度榜样都可能受到 XXE 进击本篇文章以 java 法度榜样为例给大年夜家先容 XXE 破绽的成因及修复XXE 破绽具体请见 CWE-611: Improper Restriction of XML External Entity Reference (‘XXE’)(http://cwe.mitre.org/data/definitions/611.html)

二、XML外部实体注入

XXE 破绽可能会用于提取数据、履行远程办事器哀求、扫描内部系统、履行回绝办事进击和其他进击营业影响主要取决于受影响的引用法度榜样和数据保护需求

2018年至今,CVE 中共有宣布了 92 条破绽信息与其相关部分CVE如下:

CVE-2018-8027

Apache Camel 2.20.0 到 2.20.3 和2.21.0 Core 在 XSD 验证处置惩罚器中存在 XXE 破绽

CVE-2018-13439

微信支付 Java SDK 中的 WXPayUtil 类中存在XXE破绽此进击可以经由过程特制的 UXF 文件进行进击

CVE-2018-1364

IBM Content Bavigator 2.0 和 3.0 版本中在处置惩罚XML数据时,易受XML外部实体(XXE)进击远程进击者可以使用此破绽裸露敏感信息或占用内存资本

三、示例代码

3.1 缺陷代码

本节应用示例代码滥觞为某开源支付 JavaSDK (https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1),源文件名:WXPayUtil.java,文件路径为:java-sdk-v3\src\main\java\com\github\wxpay\sdk

在上述代码可以看到在25行处数据经由过程 xmlToMap 形参传入,数据未做任何过滤,且 XML 处置惩罚器也未做安然设置就在32行处对数据做懂得析,而实际场景中,参数 strXML 也是受进击者节制的,这样进击者可能经由过程构造恶意的 strXML 来进行 XXE 进击

应用360代码卫士对上述示例代码进行检测,可以在文件第32行检出“有风险的XML外部实体注入”缺陷如图1所示:

图1检测出有风险的XML外部实体注入

3.2 修复代码

在上述修复代码中的第28行应用的是一个xml对象类WXPayXmlUtil,用于天生一个安然的xml处置惩罚器而 WXPayXmlUtil 类中最为关键的是第16行,经由过程 setFeature 让天生的 xml 处置惩罚器完全禁用 DTDS经由过程图2可以看出,360代码卫士对修复后的代码并未检有缺陷

图2XXE破绽修复示例

四、若何避免XXE破绽

常见的避免措施:

1. 尽可能应用简单的数据款式(如:JSON),避免对敏感数据进行序列化;

2. 及时修复或更新利用法度榜样或底层操作系统应用的所有XML处置惩罚器和库同时,经由过程依附项检测,将SOAP更新到1.2版本或更高版本;

3. 在利用法度榜样的所有XML解析器中禁用XML外部实体和DTD进程,详细实现可以参考《OWASP Cheat Sheet ‘XXE Prevention’》(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet)

如下代码是java利用法度榜样中应用DocumentBuilderFactory解析xml时警备XXE破绽的示例:

4. 输入校验:在办事器端应用白名单进行输入验证和过滤,以防在XML文档、标题或节点中呈现恶意数据

5. 验证XML和XSL文件上传功能是否应用XSD验证或其他类似验证的措施来验证上传的XML文件

6. DAST对象必要额外的手动步骤来反省和使用XXE破绽,而应用ASAT对象可以经由过程检测依附项和安然设置设置设备摆设摆设来发明XXE破绽

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包