Guidelines
安全配置错误-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 导航器
标语
Secure coding made practical
Explore secure coding guidelines to understand and mitigate software vulnerabilities like the OWASP Top 10, and dive into guided training Missions to practices in real-world app simulations.