具有上传恶意WAVE文件能力(例如作者)的用户,可以利用WordPress媒体库中的XML解析问题,导致XXE攻击,进而可能导致文件系统信息泄露
XML外部实体(XXE)漏洞
XML提供了定义自定义实体的可能性,这些实体可以在整个文档中重复使用。例如,这可以用于避免重复。以下代码定义了一个实体myEntity供后续使用。

定义的实体的值也可以来源于URI引用的外部源。在这种情况下,它们被称为外部实体:

XXE攻击滥用了这一特性。如果攻击者提供file:///var/www/wp-config.php作为URI,他将成功泄露敏感文件内容。当在用户控制的内容上运行配置宽松的XML解析器时,这种攻击是可能的。
WordPress中的XXE
WordPress具有媒体库,允许经过身份验证的用户上传媒体文件,然后可以在他们的博客文章中使用。为了从这些媒体文件中提取元信息,例如艺术家姓名或标题,WordPress使用了getID3库。其中一些元数据以XML形式解析。这里报告了一个可能的XXE漏洞(第730行)。

libxml_disable_entity_loader(true)函数已被弃用,因为PHP 8版本使用Libxml2 v2.9+,默认情况下禁用外部实体获取。
使用以下命令创建一个恶意的WAVE文件

创建一个dtd文件,然后添加以下代码,这将允许你检索包含敏感数据(如数据库凭证)的wp-config.php文件。

现在启动一个HTTP服务器

将恶意的.wav文件上传到WordPress应用程序。上传.wav文件后,你应该在HTTP服务器日志中看到以下请求。注意,为了有效窃取数据,请使用Zlib进行解码。

之后你将获得数据库凭证,登录数据库并尝试找到管理员

corp-001是管理员,破解其密码哈希,然后以管理员身份登录

WordPress在5.7.1版本中通过重新引入libxml_disable_entity_loader()函数的调用来修补了该漏洞,该函数在PHP 8中已被弃用。为了避免PHP弃用警告,在调用中加入了PHP错误抑制操作符@。

https://blog.wpsec.com/wordpress-xxe-in-media-library-cve-2021-29447/
https://nvd.nist.gov/vuln/detail/CVE-2021-29447
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29447
https://github.com/motikan2010/CVE-2021-29447
https://www.youtube.com/watch?v=pkooNXGHl7c
https://www.youtube.com/watch?v=tE8Smz1Jvb8
https://www.mend.io/vulnerability-database/CVE-2021-29447