在SonarSource,我们持续改进我们的代码分析工具和安全规则。我们最近改善了我们的安全引擎去嗅探更多了OWASP Top 10和CWE Top 25安全问题类型。当我们通过我们的新的分析工具去测试一些最受欢迎的PHP开源项目的时候,我们发现了关于WordPress 平台一些有趣的问题。
WordPress是世界上最受欢迎的内容管理系统,几乎全世界40%网站都在使用它。广泛的适用性导致了它成为了网络犯罪的顶级目标。它的代码被安全社区与漏洞赏金猎人反复地审计以获得关于安全问题报告的高额赏金。关键代码问题很少能逃过他们的眼睛。
在这片博客中我们讨论我们的分析器关于它新的漏洞报告。我们将探讨该漏洞基于PHP8产生的根本原因,并且展示攻击者如何利用它来破环wordpress的安装安全。我们负责任地向wordpress安全团队披露了这个漏洞,并且他们已经在最新的5.7.1版本中修复了这个问题并且分配了编号CVE-2021-29447。
影响
这个漏洞是一个授权的XXE漏洞。它影响wordpress 5.7.1之前的几乎所有版本,并且攻击者可以远程控制它。
- 任意文件下载:在这台主机文件系统上的任意文件都将可以被检索到。例如,包含了数据库认证信息-的敏感文件wp.config.php。
- SSRF:在安装wordpress的时候可能导致ssrf。根据环境的不同,它可能导致严重的后果。
这个漏洞只能在PHP8的环境中被利用。除此之外,需要上传媒体文件的权限。在一个标准的wordpress安装过程中,这个问题只有软件的所有者才能使用。但是集合一些其他的漏洞或者有一个插件允许访问或者上传媒体文件。他将可以被低权限的用户利用。
wordpress在4月14日发行了一个security&maintenance update为他们的app打了补丁来保护他们的用户。
技术细节
在这个部分我们将近距离探讨这个漏洞的技术细节。首先我们简要地讨论一下什么是XXE。接着,我们通过我们分析器的漏洞报告定位到问题代码行深入地分析该漏洞,并且讨论为什么这个漏洞在该问题代码行中已经有防护措施的情况下还会出现在PHP8的环境中。最后我们来展示攻击者如何利用精心编写的输入提取wp-config.php的源码,以及如何修复这个漏洞。
XXE
XML提供了外部自定义实体通过文档被复用的可能性。例如,被用于避免重复。下面的代码定义了一个实体myEntity以供远程调用。
<!DOCTYPE myDoc [ <!ENTITY myEntity "a long value" > ]>
<myDoc>
<foo>&myEntity;</foo>
<bar>&myEntity;</bar>
</myDoc<