RIPS 团队公布一个任意文件删除漏洞:WordPress 团队居然七个月都没补上
WordPress 是网络上最受欢迎的 CMS 系统。据 w3tech 统计,约有 30% 的网站运行了该系统。该系统的应用是如此广泛,难免会成为网络犯罪分子攻击目标。
RIPS 团队通过 Hackerone 向 WordPress 团队报告了一个任意文件删除漏洞,这个漏洞可能会导致攻击者执行任意代码。早在 7 个月前,RIPS 团队就向 WordPress 安全团队报告了这个漏洞,但到目前为止,该漏洞仍然没有得到修补。自初次报告(该报告既没有提供任何补丁,也没有给出具体的修复计划)至今,已经过了漫长的时间,但是仍然没有看到任何的修复迹象,所以,团队决定将这个漏洞公之于众,以督促其尽快采取行动。
谁会受到该漏洞的影响
所有 WordPress 版本,包括当前的 4.9.6 版本在内,都面临这个漏洞的威胁。
要想利用下面讨论的这个漏洞,攻击者需要事先获得编辑和删除媒体文件的权限。因此,该漏洞可用于通过接管角色与作者一样低的帐户或通过利用其他漏洞/错误配置来实现提权。
危害:攻击者能够利用它做什么
利用这个漏洞,攻击者能够删除 WordPress 安装的任何文件(+ PHP 服务器上的任何其他文件,即 PHP 进程有权删除的,尽情删就是了)。除了删除整个 WordPress 安装的可能性(如果当前没有备份可用的话,将会导致灾难性后果)之外,攻击者还可以利用任意文件删除功能绕过一些安全措施,继而在 Web 服务器上执行任意代码。更确切地说,攻击者可以删除下列文件:
.htaccess:通常情况下,删除该文件不会有任何安全影响。但是,在某些情况下,.htaccess 文件包含与安全相关的安全约束(例如,对某些文件夹的访问限制),因此,删除此文件后,相应的安全限制将会随之消失。
index.php文件:通常情况下,一些空的 index.php 文件被放置到各个目录中,以防止相应目录中的内容被列出。删除这些文件后,攻击者就能够列出受该方法保护的目录中的所有文件。
wp-config.php:删除这个 WordPress 安装文件会在下次访问该网站时触发WordPress安装过程。这是因为 wp-config.php 包含数据库凭证,如果没有它,WordPress 的就会采取尚未安装之前的操作。攻击者可以删除该文件,然后,使用为管理员帐户选择的凭据进行安装,最后在服务器上执行任意代码。
漏洞详情
将未经过滤的用户输入传递给文件删除函数时,就可能触发任意文件删除漏洞。对于 PHP 来说,当调用 unlink() 函数并且可能影响部分或整个参数 $filename 的用户输入没有进行适当的过滤时,就可能出现这种情况;其中,该参数表示表要删除的文件的路径。
在 WordPress Core 中,引发这个漏洞的代码位于 wp-includes/post.php 文件中:
在上面显示的 wp_delete_attachement() 函数中,$ meta ['thumb'] 的内容未经任何过滤处理就直接传递给 unlink() 调用了。这段代码的用途是,在删除图像的同时,一起将其缩略图删掉。在 WordPress 中,通过媒体管理器上传的图像将作为 attachement 类型的文章对待。值 $meta ['thumb'] 是从数据库中检索的,在数据库中,它保存在表示图像的文章的自定义字段中。因此,在从数据库检索后,到传递给关键函数 unlink() 期间,并没有对表示缩略图文件名的值进行任何过滤或检查。如果该值在保存到数据库之前也没有经过任何过滤,或过滤不充分的话——我们将在下一个代码清单中看到这种情况——就可能出现一个两阶段的任意文件删除漏洞。
后面的代码片段(位于/wp-admin/post.php 中)展示了隶属于附件的缩略图的文件名是如何保存到数据库的。用户输入从 $_POST ['thumb'] 中取出后,直到通过 wp_update_attachment_metadata() 保存到数据库这段过程中,系统没有对这些内容进行适当的安全过滤,因此,也就无法确保该值的确为正在编辑的附件的缩略图。此外,由于 $_POST ['thumb'] 的值可以将任意文件的路径保存到 WordPress 上传目录相对路径中,所以当附件被删除时,该文件也会被删除,如前面的代码所展示的那样。
🔐 临时修补程序
在撰写本文的时候,WordPress 中的这个漏洞仍未得到修复。正因为如此,RIPS 团队已经开发了一个临时补丁供大家使用。通过将该补丁添加到当前活动的主题/子主题的 functions.php 文件中,就可以将该补丁集成到现有的 WordPress 安装中。
实际上,该补丁的工作原理就是,“钩住”wp_update_attachement_metadata() 调用,对提供给 thumb 的数据进行安全过滤,确保其中不包含任何使路径遍历成为可能的内容,这样一来,攻击者就无法删除与安全相关的文件了。
当然,这里提供的补丁只是临时性的,主要用来防止用户收到恶意攻击。由于我们无法兼顾 WordPress 插件的所有可能的向后兼容性问题,所以,建议您谨慎地对 WordPress 文件进行任何修改。
时间线
2017/11/20 向 Hackerone 上的 WordPress 安全团队报告该漏洞。
2017/11/22 安全团队对这个漏洞进行分类和验证。
2017/12/12 询问进展。
2017/12/18 Wordpress 正在开发一个补丁程序。我们询问发布日期,但是没有收到回应。
2018/01/09 咨询补丁的发布日期,依然没有收到回复。
2018/01/20 鉴于该安全问题的严重性和缺乏沟通,我们请求 Hackerone 进行调解。
2018/01/24 WordPress 安全小组估计修复时间为6个月。
2018/05/24 询问有关问题的进展和/或计划,并提醒他们尽快发布,但是没有得到任何回应。
2018/05/24 向安全团队发送 twitter DM,以确保他们不会忽视 Hackerone 上的消息。
2018/06/26 漏洞提交7个月后,WordPress 安全团队仍未解决问题。
WARNING: WordPress File Delete to Code Execution
26 Jun 2018 by Slavco Mihajloski, Karim El Ouerghemmi
Congratulations @iyouport! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of upvotes received
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP
To support your work, I also upvoted your post!
Do not miss the last post from @steemitboard!
Participate in the SteemitBoard World Cup Contest!
Collect World Cup badges and win free SBD
Support the Gold Sponsors of the contest: @good-karma and @lukestokes