
가이드라인
安全配置错误-XXE 详解
“XML 外部实体” (XXE) 漏洞类别是涉及 XML 解析器的安全配置错误。
XML 标准包括引用 “实体” 的方式,例如文件和 URL。解析器通常默认完全解析外部实体,这意味着 XML 文档可能导致文件和其他敏感信息泄露给潜在的攻击者。
一个简单的例子
让我们看一个使用外部实体的 XML 文档的示例:
xml
<?xml 版本= “1.0”?>
<!DOCTYPE 外部元素 [
<!实体外部实体系统 “文件:///etc/passwd” >] >
<outerElement>&ExternalEntity;</outerElement>
首先,我们声明一个新的 “doctype”,它定义了可以存在于文档中并由解析器处理的结构/元素类型。
在其中,我们指定了一个名为 “外部实体” 的系统类型实体。该实体指向文件 “/etc/passwd”。
按照 “文档类型” 的定义,我们有了实际的 XML 数据。我们定义一个 “外部元素”,然后向 “外部实体” 实体添加引用(用 “&” 表示)。
此时,解释器将查找实体定义并解析定义的 URL,然后取代 “&externalEntity;”。
在解析过程结束时,我们最终得到一个如下所示的文档:
xml
<?xml 版本= “1.0”?>
<outerElement>
root: x: 0:0: root: /root: /usr/bin/zsh
守护进程:x: 1:1: daemon: /usr/sbin: /usr/sbin/nologin: /usr/sbin/nologin
bin: x: 2:2: bin: /bin: /usr/sbin/nologin
...
</outerElement>
缓解措施
如何完全防范 XXE 的需求和细节在很大程度上取决于其语言、框架和版本。
每种组合通常允许禁用解析器的某些方面,这些方面可能会阻止文件解析,但不允许禁用 HTTP 路径。或者它可能仍然允许实体扩展,这本身就可能导致拒绝服务漏洞。
.NET
如果您运行的是 .NET 4.5.1 或更低版本,则默认情况下以下类易受攻击:
- xmlDocument(使用 'xmlDocument.xmlResolver = null; '禁用)
- xmlTextReader(使用 'xmlTextreader.probibitdtd = true; '禁用)
- Xpath 导航器