识别XML外部实体:如何站得住脚的。io Web应用程序扫描可以帮助
![XXE缺陷出现,为什么一些常见的攻击路径如此具有挑战性的缓解以及如何站得住脚的。io Web应用程序扫描可以帮助](http://www.yyueer.com/sites/default/files/images/articles/Identifying%20XML%20External%20Entity-%20How%20Tenable.io%20Web%20Application%20Scanning%20Can%20Help_MAIN.png)
XML外部实体(XXE)缺陷提出了独特的缓解挑战,仍然是一个常见的攻击路径。学习XXE缺陷出现,为什么一些常见的攻击路径如此具有挑战性的缓解以及如何站得住脚的。io Web应用程序扫描可以帮助。
现代应用程序从用户提供的越来越多的倾向来处理数据输入,直接或间接地。这个数据处理的副作用开门的攻击漏洞XML外部实体,一个复杂的脆弱性与许多向量。
XXE是web漏洞,攻击者可以干扰功能,执行XML处理。如果利用,将允许攻击者读取文件系统和与其他系统进行交互的应用程序本身可以互动。XXE攻击就可能产生毁灭性的后果,通常被认为是至关重要的。
虽然XXE排名4号在2017年OWASP前十名——甚至有一个类别命名——这个漏洞已经失去了它的一些相关性在这期间库用于解析XML变得越来越健壮。2021年OWASP前十名放置XXE在5号,但是它不再是一个独立的类别,因为它是与“安全错误配置”类别合并。这种融合OWASP的类别列表反映出越来越依赖第三方库和软件进行处理,这些库的宽松的配置——已成为XXE漏洞的主要原因。
XXE是什么?
XXE是一个漏洞,允许攻击者滥用应用程序的XML解析器通过发送恶意文档或通过修改已经包含XML请求。
XXE漏洞通常用于读取文件系统上。然而,也可以利用这个漏洞拒绝服务(DoS)或服务器端请求伪造(SSRF)攻击。
XXE可以被攻击者用来检索资源,比如配置文件包含凭证和其他秘密,或访问内部服务可能是敏感的。因此利用这个漏洞可以让攻击者从XXE主SSRF。
在了解如何检测一个XXE之前,重要的是要理解XML的语法信封。
XML信封代表发送的负载。初这个信封是文档类型定义的规则集和属性,必须遵循XML文档。
这是一个攻击者可以定义一个内部或外部实体。
- 内部实体:如果一个实体内部声明文档类型定义(DTD),它被称为一个内部实体。
- 语法:< !实体entity_name " entity_value " >
- 外部实体:如果一个实体外声明DTD叫做外部实体(由系统确定)。
- 语法:< !实体entity_name系统" entity_value " >
而外部实体代表的核心操作,内部实体攻击者仍然是最简单的方法——或安全从业者——检测可能的注入。
XXE的剥削主要是由于dtd成为可能,在某些情况下,默认情况下被激活。
Java似乎是语言与dtd最库默认启用。在我们的经验中,这是常见的攻击者检测到一个XXE在Java应用程序中使用XML解析器(如Javax XML绑定库)。在其他语言中,dtd必须显式地激活。许多网站因此脆弱是由于一个默认的配置还是因为网站所有者不知道图书馆在使用默认启用这个选项。
如何检测XXE
在下面的例子中,我们将展示如何使用内部实体攻击者将取代变量的内容当服务器解析文档。
这种技术没有影响,它只是确认了dtd被激活,但它只能工作在服务器解析请求的情况下向用户返回一个响应。
XXE的复杂性在于许多可能,有时外来,注入点。
一个页面,该页面允许用户发送一个Microsoft Office文档,例如,这种事情立即警报攻击者可能存在的弱点。
后面的扩展”。多克斯”或“。xlsx”掩盖了一个简单的zip归档文件包含许多XML格式的文件。
在上面的例子中,这将是足以让攻击者修改文件“xl /工作簿。xml”添加XXE负载然后.xslx将文件压缩和扩展。
有效载荷将执行在处理XML文件。
不过,其他不合乎逻辑的情况下可以。文件上传,例如,它通常是常见的攻击者试图利用这个特性通过发送任意文件允许他们引发跨站点脚本(XSS)或上传网站管理权限。
但是,在照片的情况下(直接取自一个相机或智能手机),应用程序可以尝试解析可扩展的元数据平台(XMP)数据的形象,实际上是XML,因此也可以包含一个负载。
三种常见的利用XXE
XXE为攻击者提供了多个开发选项。常见的攻击路径的三个例子:
- 一个服务器上读取任意文件
- 直接输出目标应用程序的响应
- 通过一个带外的交互(盲注)
- 执行一个DoS
- 执行一个通过XXE SSRF
一个服务器上读取任意文件
回到上面的例子中,攻击者已经证实注射,他们可以尝试读取任意文件在服务器上。
我们定义一个外部实体识别的系统指令和负载的文件:/ / / etc / passwd,时将执行解析XML文档。最终的结果是,在有效负载文件的内容将被返回给用户。攻击者可以利用此漏洞来读取配置文件,可以让他们获得额外的访问一个组织为了妥协。
替代这种技术是迫使一个错误在应用程序的XML解析器显示一个文件的内容。
攻击者将迫使第三方应用程序加载外部DTD包含恶意代码,这将迫使应用程序中的一个错误通过问一个不存在的文件。
错误显示时,应用程序将显示文件的内容要求的攻击者。
一个常见的缓解技术是应用严格的网络过滤阻止出站连接。这是一个技术复杂的技巧;没有深入了解在这篇文章中,足以说可以使用DTD已经存在于系统。例如,使用软件如Tomcat, VMWare或Nmap,它将有可能称之为动态载荷和重新定义参数在加载DTD。
在这个例子中,我们脆弱的机器Nmap安装包括“/ usr / share / Nmap / Nmap。dtd”文件,可以用于攻击。
我们还可以使用“带外”(盲人)技术来检索文档的内容并将其发送到外部服务器。这是有用的在这种情况下,攻击者不能招揽响应或错误消息从一个服务器,因为请求处理由另一个服务返回一个通用的反应。
而不是证实注射与内部实体的可能性,我们将直接使用一个外部实体和试图执行HTTP调用远程服务器。
一旦确认,我们将依靠外部DTD的调用将包含要执行的有效载荷。
调用外部DTD将由服务器执行,将允许它来检索一个文件的内容并将其发送给攻击者的服务器。
拒绝服务
拒绝服务通过XXE专门称为XML实体扩张,因为这种攻击利用递归地调用多个实体。
递归是一个昂贵的操作在CPU的层面上,实体被称为越多,计算时间越长。
攻击的目的是使大量递归调用,以便应用程序或服务器本身。
例子:
- 实体“a2”递归地调用" a1 "本身称之为“a0”。通过“a2”我们叫" a1 " 15倍
- 这里的操作是便宜的CPU时间和执行快速造成任何问题
- 现在“a6”称之为“a5”,递归地调用“a4”等等
- 操作变得昂贵的CPU时间和应用程序开始的滞后,需要时间来回应
因此,这种攻击是很容易自动化崩溃的服务器在一个循环中。
服务器端请求伪造
SSRF袭击之前的博文中已经解释了,所以没有深入的技术细节是它最重要的知识点是可以执行通过XXE SSRF。
而不是试图读取一个文件系统上,可以指定一个内部服务器的URL,以使应用程序执行一个请求。
解析XML信封时,服务器本身将请求发送到目标服务器。因此,攻击者可以访问内部资源或文件夹不会从外面是可用的,例如内部脆弱的web应用程序框架的经理,这可能导致远程代码执行(远端控制设备)。
预防和缓解策略
有多个可用的最佳实践来保护web应用程序和用户为了避免像XXE漏洞,但最安全的方法防止XXE总是完全禁用dtd(外部实体)。
如果它是不可能完全禁用dtd,那么外部实体和外部文档类型声明必须禁用的方式是特定于每个解析器。
如果这是不可能的,有必要实施深入防御机制,如:
- Sanitize用户提供的输入:一般来说,它总是推荐过滤用户条目。如果web应用程序只能识别和受信任应用程序发送一个请求,一个可能的对策是应用allowlist方法。如果应用问题不清楚,可以添加输入验证技术,确保输入字符串方面预期的格式。
- 如果可能的话,确认接收到的数据是否有有效的和预期的格式。在可能的情况下,应该通过验证可用库,因为regex复杂格式难以维护,容易出错。
- 滤波器输出流量不允许加载外部dtd。
- 没有应用程序错误消息显示给用户,而是显示通用的消息吗。
使用站得住脚的。io Web应用程序扫描XML外部实体的缺陷检测
Tenable.io通过典型的Web应用程序扫描帮助识别XXE漏洞扫描和API扫描功能,包括以下专用插件:
- 插件98113年可以检测通用XXE(盲&非盲)相关的问题和帮助识别XXE漏洞。
- 插件98886年,98897年可以检测各种Apache SOLR XXE漏洞。
- 插件113199年可以检测的品种是JMX-HTTP桥XXE脆弱性。
获得更多的信息
是由所有图标www.flaticon.com
相关文章
- 威胁情报
- 威胁管理
- 漏洞扫描