一、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漏洞。 |
CVE-2018-1000548 | 在版本号小于 14.3 的 Umlet 中,在文件解析中存在XML外部实体注入漏洞,可能导致机密数据泄露、拒绝服务、服务器端请求伪造。此攻击可以通过特制的 UXF 文件进行攻击。 |
CVE-2018-1364 |
IBM Content Bavigator 2.0 和 3.0 版本中在处理XML数据时,易受XML外部实体(XXE)攻击。远程攻击者可以利用此漏洞暴露敏感信息或占用内存资源。 |
三、示例代码
3.1 缺陷代码
本节使用示例代码来源为某开源支付 Java SDK (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代码卫士对修复后的代码并未检出缺陷。
图2 XXE漏洞修复示例
四、如何避免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漏洞。
以上是XML外部实体注入漏洞的示例分析的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

记事本++7.3.1
好用且免费的代码编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中