漏洞概述
众所周知,Contact Form 7是一款受欢迎的WordPress插件。但根据安全研究专家的最新发现,Contact Form 7中有一个无限文件上传漏洞。这个漏洞被标记为高危漏洞,目前有漏洞Contact Form 7插件已经安装在500多万个网站上,使这些网站成为严重的攻击者“香饽饽”。在这个漏洞的帮助下,攻击者将能够实施网络钓鱼、网站接管、数据窃取和目标网站Credit卡欺诈等攻击活动。
本文将介绍和分析漏洞的原因,并对漏洞进行概念验证PoC以及缓解方案。
Contact Form 7插件
关于插件的信息,我们直接引用插件的官方文件:
Contact Form 7是免费的wordpress联系表单插件,简称CF7,在WP官方插件排名第一,也是表单插件中最受欢迎的插件之一。该插件可以管理多个联系人的表单,并通过简单的标记灵活定制表单和电子邮件内容。
漏洞介绍
国家漏洞数据库(NVD)目前,漏洞已被标记为CVE-2020-35489,相关漏洞描述如下:
- WordPress的Contact Form 7插件(低于版本)v5.3.2)允许攻击者上传和执行不受限制的文件和远程代码(因为特殊字符可能包含在文件名中)。
- 该插件允许WP管理员在自己的网站上创建联系人表格,网站用户可以在表格中输入相关联系信息,获得技术支持或反馈信息。
- 恶意用户可以通过上传文件名中包含双扩展名的文件来利用漏洞。文件名不能打印或分隔特殊字符,如“说php .jpg”(\t字符为分隔符)。
接下来,Contact Form 7不会从上传文件的文件名中删除这些字符,并分析包括第一个扩展名在内的以前的文件名,分隔符会导致Contact Form 7无法分析后续的扩展名。因此,最终的文件名变成了“php”。
攻击者将能够通过远程代码访问或执行服务器中的文件。
关于Contact Form 7的源代码,感兴趣的学生可以点击此处查看托管GitHub上源代码。
因此,攻击者将能够利用漏洞CVE-2020–35498对目标站点有严重的安全影响。
漏洞利用PoC
请注意,由于官方的原因,我们不能公开披露漏洞的相关技术和使用细节PoC尚未发布。而且,在2020年12月31日之前,我们必须给供应商和用户一些时间来更新。
在这里,我将在当地配置一个WordPress网站,演示如何利用漏洞。我会用的。Contact Form 7 v5.3.1由于该漏洞已于2020年12月17日发布,版本的插件用于演示该漏洞的使用方法5.3.2修复版本。
环境配置
首先,我们需要下载、导入、安装和激活插件:
此时,Contact Form 7插件已安装并激活陈公公。
第二步,我们要在那里WordPress在侧栏中找到“Contact”点击标签“Add New”按钮创建新表单。
接下来,为了演示漏洞,我创建了一个“Job Application Form”该表单为上传文件提供了功能支持。
最后,将表单添加到页面并发布。
攻击场景
我们访问这个新页面,然后在表单中上传文件“exploit.php .jpg”的文件。
此时,我们的恶意文件将成功上传到服务器。
点击“Submit”按钮,我们将收到服务器端返回的上传响应,表明我们的文件已经成功上传,文件名称“exploit.php”。接下来,我们将能够通过任何代码访问或执行服务器中的文件。
默认上传文件的路径是“wp-content/uploads”,但是,文件上传路径可以通过以下方式修改(WPCF7_UPLOADS_TMP_DIR):
漏洞影响
利用这个漏洞,攻击者可以直接上传任何类型的文件,并绕过目标站点部署的上传文件类型限制,其后果可能不限于:
- 接管整个网站;
- 恶意软件感染,盗窃Credit将用户重新定向恶意页面的卡信息;
- 网络钓鱼攻击;
- 获取目标服务器文件系统和数据库信息;
- 插入后门程序;
- ......
漏洞缓解
进入WordPress将插件版本更新到插件功能页面v5.3.2或者更新版本。此外,我们还可以使用它WordPress安全漏洞扫描器-WPSec扫描和监控我们的WordPress站点。运行WPSec之后,我们将看到如下图所示的输出:
事实上,类似的漏洞经常出现。因此,我们建议用户尽可能定期手动更新插件。此外,我们应该禁止它uploads文件夹内的PHP代码执行功能。如果使用Nginx,以下内容可添加到配置文件中禁用PHP代码执行功能:
对于Apache Web我们不建议使用服务器uploads放置在文件夹中.htaccess文件来防止PHP代码执行,因为攻击者可能会使用上述漏洞来覆盖文件。我们可以使用它Apache配置文件以防止执行,但这可能是共享宿主环境中的一个问题。同时,我们可以AllowOverride设置为None以防止.htaccess文件覆盖设置。