目录导航
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
参考
披露日期
2021-11-10
WP Reset 插件的 PRO 版本(版本 5.98 及以下)存在一个漏洞,该漏洞允许任何经过身份验证的用户,无论其授权如何,都可以擦除整个数据库。
因为它会擦除数据库中的所有表,所以它将重新启动 WordPress 安装过程,这可能允许攻击者启动此安装过程,然后在此过程结束时创建一个管理员帐户,因为默认情况下,一旦安装完成,就必须创建一个管理员帐户。 WordPress 网站已安装。
在此之后,他们可以通过上传恶意插件或上传后门来进一步利用该站点。

该插件可帮助您快速将站点的数据库重置为默认安装值,而无需修改任何文件。它会删除所有自定义和内容或仅删除所选部分,如主题设置。
在相关插件的开发团队做出快速响应(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 付费版本的网站不受此问题的影响,并已收到虚拟补丁。
转载请注明出处及链接