声明
以下内容,来自且听安全公众号的QCyber作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。
漏洞信息
Elementor 是全球最受欢迎的 WordPress 插件之一,可以使得网站创建者能够使用只管的视觉构建器构建专业、像素完美的网站。插件累计安装数量达到 500w+ :
近日 Wordfence 威胁情报团队发布了针对 WordPress Elementor 存在 RCE 漏洞的信息,编号 CVE-2022-1329 。CVSS Score 高达 9.9 。经过身份认证的用户(普通用户即可)可以上传任意 PHP 代码,从而 Getshell。
影响版本为:3.6.0 – 3.6.2 :
环境搭建
安装Apache 、PHP和MySQL 数据库。选择安装WordPress v5.9.3版本:
安装配置远程调试环境。
下载`elementor.3.6.2.zip`和`elementor-3.6.3.zip`。上传插件并激活:
漏洞分析
Elementor从v3.6.0 版本开始,引入了`Onboarding`模块,主要用来优化 WordPress 应用程序的AJAX请求操作。
`\elementor\core\app\modules\onboarding\module.php`中定义了一个 `admin_init` 的 Hook,当任意构造一个`admin-ajax.php`请求(比如`/wp-admin/admin-ajax.php?action=test`)
程序都会进入`Onboarding`的处理逻辑,触发断点:
从上面的判断可以得出,请求必须是 POST 类型,并且必须携带 WordPress 的 `_nonce` 参数(可以在 WordPress 认证时获取)并验证是否正确,然后进入 `maybe_handle_ajax` 函数:
根据 action`参数的取值,选择不同的处理方式,重点关注
`elementor_upload_and_install_pro` ,进入 `upload_and_install_pro` 函数:
读取上传的文件(参数名称为`fileToUpload`)并调用 WordPress 自带的插件安装函数`Plugin_Upgrader-#install` ,安装成果后,将调用`activate_plugin` 激活插件:
这里指向的插件路径为 `WP_PLUGIN_DIR . ‘/elementor-pro/elementorpro.php’`。
回顾前面的分析,当 `action` 取值为 `elementor_upload_and_install_pro` 时,实际上完成的是 WordPress 正常的插件安装过程,这本身没有问题,但是从 `Onboarding` 处理 AJAX 请求的验证过程来看,只对 `_nonce` 进行了检查,并未对用户权限进行限制,这就意味着普通用户也可以安装插件,从而Getshell。
漏洞复现
从前面的分析可知,我们首先需要提取 `_nonce` ,在 WordPress 登录过程中就可以获取:
手动构造一个插件安装包( ZIP 文件),从前面分析可知,压缩包中必须有一个 `elementor-pro` 文件夹,文件夹里面必须有一个 `elementor-pro.php` 文件,可以将 Webshell 植入其中,然后构造数据包上传:
上传成功:
**修复方式
**
增加了对当前用户权限的检查。
原文链接:
https://mp.weixin.qq.com/s/YtqSaDB8Ufn0w62W2BuZ_A