WordPress插件WP Reset PRO存在未授权清空数据库漏洞

WordPress插件WP Reset PRO存在未授权清空数据库漏洞

WP Reset PRO 插件中存在一个严重的安全漏洞,允许任何经过身份验证的用户擦除数据库。

漏洞概况

WordPress WP Reset PRO Premium Plugin <= 5.98 – Authenticated Database Reset vulnerability

软件

WP Reset

易受攻击的版本

<= 5.98

修正版本

5.99

CVE

CVE-2021-36909

参考

CVE-2021-36909
漏洞详情
插件页面漏洞公告

披露日期

2021-11-10

WP Reset 插件的 PRO 版本(版本 5.98 及以下)存在一个漏洞,该漏洞允许任何经过身份验证的用户,无论其授权如何,都可以擦除整个数据库

因为它会擦除数据库中的所有表,所以它将重新启动 WordPress 安装过程,这可能允许攻击者启动此安装过程,然后在此过程结束时创建一个管理员帐户,因为默认情况下,一旦安装完成,就必须创建一个管理员帐户。 WordPress 网站已安装。

在此之后,他们可以通过上传恶意插件或上传后门来进一步利用该站点。

WordPress插件WP Reset PRO存在未授权清空数据库漏洞

该插件可帮助您快速将站点的数据库重置为默认安装值,而无需修改任何文件。它会删除所有自定义和内容或仅删除所选部分,如主题设置。

在相关插件的开发团队做出快速响应(24 小时内!)后,所描述的问题已在 5.99 版中得到修复

WP Reset PRO 插件中的安全漏洞

此插件中的问题是由于缺乏授权和 nonce 令牌检查造成的。该插件在admin_action_*范围内注册了一些操作。在此漏洞的情况下,它是admin_action_wpr_delete_snapshot_tables

不幸的是,admin_action_*范围不会执行检查以确定用户是否有权执行所述操作,也不会验证或检查 nonce 令牌以防止 CSRF 攻击。

此操作注册如下:

add_action('admin_action_wpr_delete_snapshot_tables', array($this, 'delete_snapshot_tables'));

函数 delete_snapshot_tables 如下所示:

function delete_snapshot_tables($uid = '')
{
    global $wpdb;

    if (empty($uid)) {
        $uid = $_GET['uid'];
    }

    if (strlen($uid) != 4 && strlen($uid) != 6) {
        return new WP_Error(1, 'Invalid UID format.');
    }

    $tables = $wpdb->get_col($y = $wpdb->prepare('SHOW TABLES LIKE %s', array($uid . '\_%')));
    foreach ($tables as $table) {
        $wpdb->query('DROP TABLE IF EXISTS `' . $table . '`');
        if ($wpdb->last_error !== '') {
            $this->log('error', 'Failed to delete table ' . $table . ': ' . $wpdb->last_error);
        } else {
            $this->log('info', 'Deleted table ' . $table);
        }
    }

    if (!empty($_GET['redirect'])) {
        wp_safe_redirect($_GET['redirect']);
    }

    return true;
}


可以看出,uid查询参数是从URL中抓取的,直接作为应该删除的表的前缀。由于使用了 LIKE 操作符,我们可以通过一个查询参数如%%wp来删除所有前缀为 wp 的表。

完成此操作后,某人只需访问该站点的主页即可开始 WordPress 安装过程。

WP Reset PRO 中的补丁

由于这是一个高级插件,因此无法在 WordPress.org SVN 存储库中看到该补丁。

根据我们自己的研究以及与 WP Reset PRO 插件开发团队的沟通,我们可以确认已使用current_user_can函数添加了身份验证和授权检查,以及确定是否存在有效 nonce 令牌的检查使用check_admin_referer函数请求。

除此之外,还会检查uid查询参数,并使用ctype_alpha函数确保它是一个仅包含字母的字符串。

时间线

27-09-2021 – 我们发现了 WP Reset PRO 中的漏洞,并向所有 Patchstack 付费版本客户发布了一个虚拟补丁
27-09-2021 – 我们联系了插件的开发者。
28-09-2021 – 开发者回复,我们提供了漏洞信息。
28-09-2021 – 开发者发布了一个新的插件版本 5.99,修复了这个问题。
10-11-2021 – 发表文章。
10-11-2021 – 将漏洞添加到 Patchstack 漏洞数据库。

具有 Patchstack 付费版本的网站不受此问题的影响,并已收到虚拟补丁。

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注