代码安全 | 第二十三期:对XML外部实体引用的不当限制
本期主题为对XML外部实体引用的不当限制的相关介绍。
01 什么是对XML外部实体引用的不当限制?
该软件处理的XML文档可能包含带有URI的XML实体,这些URI可以解析为超出预期控制范围的文档,从而导致产品将不正确的文档嵌入其输出中。
XML文档可以选择包含文档类型定义(DTD),该文档类型定义(DTD)除其他功能外,还可以定义XML实体。可以通过提供URI形式的替换字符串来定义实体。XML解析器可以访问此URI的内容,并将这些内容重新嵌入XML文档中以进行进一步处理。
02 对XML外部实体引用的不当限制构成条件有哪些?
满足以下条件,就构成了一个该类型的安全漏洞:
通过提交使用file:// URI定义外部实体的XML文件,攻击者可以使处理应用程序读取本地文件的内容。例如,诸如“ file:/// c:/winnt/win.ini”之类的URI(在Windows中)指定文件C:\ Winnt \ win.ini,或file:/// etc / passwd指定密码基于Unix的系统中的文件。
通过将URI与其他方案(例如http://)一起使用,攻击者可以强制应用程序向攻击者无法直接到达的服务器发出传出请求,这些请求可用于绕过防火墙限制或隐藏攻击源(例如端口扫描)。
读取URI的内容后,会将其反馈回正在处理XML的应用程序中。该应用程序可以回显数据(例如在错误消息中),从而暴露文件内容。
03 对XML外部实体引用的不当限制漏洞会造成哪些后果?
如果攻击者能够包括精心制作的DTD,并且启用了默认实体解析器,则攻击者可能能够访问系统上的任意文件。
DTD可以包括服务器可以执行的任意HTTP请求。这可能导致利用服务器与其他实体的信任关系的其他攻击。
使用指向大文件的URI或始终返回数据的设备(例如/ dev / random),该软件可能会消耗过多的CPU周期或内存。或者,URI可以引用包含许多嵌套或递归实体引用的文件,以进一步减慢解析速度。
04 对XML外部实体引用不当限制的防范和修补方法有哪些?
可以将许多XML解析器和验证器配置为禁用外部实体扩展。
05 对XML外部实体引用的不当限制漏洞样例:
用静态代码检测分析上述程序代码,则可以发现代码中存在着“对XML外部实体引用的不当限制” 导致的代码缺陷,如下图:
对XML外部实体引用的不当限制在CWE中被编号为CWE-611: Improper Restriction of XML External Entity Reference