Introo到XXe漏洞:AppSec简化

Introo到XXe漏洞:AppSec简化

时间:2021-2-5 作者:admin

嘿!欢迎来到AppSec简化版的第一部分。今天,我们将探讨一个名为XML外部实体漏洞的迷人漏洞,即xxx!

什么是X?

要理解xxx,我们需要首先讨论XML文档中的“DTD”。

XML文档可以包含文档类型定义,或DTD。DTD用于定义XML文档的结构及其包含的数据。它们在文档中使用DOCTYPE标签,像这样:

XML

1
<?xml version=”1.0″ encoding=”UTF-8″?>
2
<!DOCTYPE …INSERT DTD HERE…>

在DTD中,您可以声明XML实体。XML实体在编程语言中非常类似于变量。

例如,这个DTD声明了一个名为greeting有价值的”Hello World!”。在xml文档中,可以使用&greeting,则xml文档将加载“Hello World!”代替它。

XML

1
<?xml version=”1.0″ encoding=”UTF-8″?>
2
<!DOCTYPE example [
3
<!ENTITY greeting “Hello World!” >
4
]>
5
<example>&greeting;</example>

XML外部实体

有一种特殊类型的xml实体称为外部实体。它们用于使用URL访问本地或远程内容。可以使用SYSTEMfile指的是file:///secrets.txt在本地文件系统上。Xml解析器将替换任何&file的内容在文档中引用。file:///secrets.txt.

XML

1
<?xml version=”1.0″ encoding=”UTF-8″?>
2
<!DOCTYPE example [
3
<!ENTITY file SYSTEM “file:///secrets.txt” >]>
4
<example>&file;</example>

有什么问题吗?

那么,这个功能有什么问题呢?想象一下,如果应用程序解析用户提供的XML文档并在站点上显示结果。

如果用户可以在上传中声明任意XML实体,则可以将外部实体声明到计算机上的任何位置。例如,这个xml文件包含一个指向file:////etc/shadow在您的服务器上:

XML

1
<?xml version=”1.0″ encoding=”UTF-8″?>
2
<!DOCTYPE example [
3
<!ENTITY file SYSTEM “file:////etc/shadow” >]>
4
<example>&file;</example>

二./etc/shadow文件在Unix系统上存储用户名及其加密密码。当解析的xml文档返回给用户时,file:////etc/shadow也将包括在内。

通过利用XML解析器,恶意用户现在可以读取服务器上的任意文件。它们可能能够检索用户信息、配置文件或其他敏感信息(如AWS凭据)。攻击者还可以通过递归地使XML解析器取消引用实体来发起拒绝服务攻击。这就是所谓的十亿笑攻击。说到灾难性的弱点!

防震

那么,如何防止xxx发生呢?防止xxx的最佳方法是限制XML解析器的功能。

由于DTD处理是XXE攻击的必要条件,开发人员应该在他们的XML解析器上禁用DTD处理。如果不可能完全禁用DTD,则应该禁用外部实体、参数实体和内联DTD。还可以完全禁用XML实体的扩展。

如何配置XML解析器的行为将取决于您使用的XML解析器。例如,如果使用默认的PHPXML解析器,libxml_disable_entity_loader需要设置为TRUE若要禁用外部实体的使用,请执行以下操作。有关如何为解析器执行此操作的详细信息,请参阅OWASP备忘单.

最后,您应该定期对应用程序进行审计,以捕获可能已经写入代码中的xxx。

如何检测xxx?

如何在应用程序中检测xxx?可以采取的一种方法是检查应用程序处理XML文档并使用恶意XML输入测试它们的功能。例如,您可以提交此xml文档,并查看该文件是否file:///etc/hostname被送回给你。

XML

1
<?xml version=”1.0″ encoding=”UTF-8″?>
2
<!DOCTYPE example [
3
<!ENTITY test SYSTEM “file:///etc/hostname” >]>
4
<example>&test;</example>

但是很明显,使用黑匣子方法是有风险的,因为它不能保证您会在系统中找到XXE的所有实例。因为XXE是一个具有清晰和可定义签名的漏洞,所以分析源代码是一种更好的方法。

当xxx处理用户提供的XML文件或其DTD被用户输入污染的XML文件时,XML解析器容易受到xxx的攻击。同时,需要配置解析器以评估DTD和外部实体。我们本质上是在寻找两件事:

  1. 首先,我们正在寻找接收用户提供的xml文件或DTD的XML解析器.
  2. 然后,我们将检查XML解析器是评估DTD还是外部实体。

您可以手动审核源代码以查找这些签名,也可以使用静态分析安全性测试工具为您查看代码。大多数静态分析工具可以检测XML解析器是否正在评估DTD和外部实体。但是,只有能够处理数据流的静态分析工具才能像ShiftLeft‘s NG-SAST可以检测用户输入是否可以到达解析器,从而自动检测这两种情况。

Introo到XXe漏洞:AppSec简化

最后,应用程序依赖会导致许多xxx,因此您还应该监视和升级应用程序或底层操作系统使用的所有XML处理器和库。

稍后在AppSec简化版中,我们将针对一个开源应用程序,并查看如何使用代码分析找到XXE漏洞。继续关注!

福州APP开发哪家强?

版权所有:https://www.eraycloud.com 转载请注明出处