BetterLinks 插件在简单 301 重定向中修补了严重漏洞

BetterLinks 插件在简单 301 重定向中修补了严重漏洞

2021 年 4 月 8 日,Wordfence 威胁情报团队针对在 BetterLinks 的 Simple 301 Redirects 中发现的几个漏洞启动了负责任的披露流程,BetterLinks 是一个安装在超过 300,000 个站点上的 WordPress 插件。其中一个缺陷使未经身份验证的用户可以更新站点的重定向,从而允许攻击者将所有站点流量重定向到外部恶意站点。此外,除了不太重要的操作外,还有几个剩余的缺陷使经过身份验证的用户可以执行安装和激活插件等操作。

我们最初于 2021 年 4 月 8 日联系了该插件的开发人员。在建立了适当的沟通渠道后,我们于 2021 年 4 月 11 日提供了完整的披露细节。初始补丁于 2021 年 4 月 15 日发布,以及完整的补丁版本该插件于 2021 年 5 月 5 日发布,版本为 2.0.4。

其中一些漏洞被认为是关键的。因此,我们强烈建议立即更新到可用的最新补丁版本 2.0.4。

Wordfence Premium 用户在 2021 年 4 月 8 日收到了一项防火墙规则,以防止针对这些漏洞的任何攻击。仍在使用 Wordfence 免费版本的网站在 2021 年 5 月 8 日收到了相同的保护。


BetterLinks 的 Simple 301 Redirects 是一个简单的插件,旨在在 WordPress 网站上创建 301 重定向。在插件的 2.0.0 版中,他们引入了几个新功能并进行了额外的增强。他们在更新中引入的功能之一是能够导入和导出重定向。不幸的是,此功能的实现并不安全。

开发人员为以下函数注册了两个 admin_init 动作钩子:import_dataexport_data。相应的功能都没有能力检查或随机数检查,这使得没有适当授权的用户可以触发功能的执行。

 class Tools { 
    public function __construct()
    {
        add_action('admin_init', [$this, 'export_data']);
        add_action('admin_init', [$this, 'import_data']);
        add_action('wp_ajax_simple301redirects/admin/get_import_info', [$this, 'get_import_info']);
    }

使用的钩子是一个 admin_init 操作,它使得任何用户都可以触发这些功能,无论身份如何。 这是因为 admin_init 动作钩子可以通过 /wp-admin/admin-post.php 端点初始化。 经过身份验证和未经身份验证的用户都可以访问此端点。

export_data 函数可用于导出重定向,这可能会泄露敏感信息,但是,对该函数的利用不会像 import_data 函数中的漏洞那么严重。 import_data 函数获取用户提供的文件内容,然后使用文件内容导入重定向列表。

     public function import_data()
    {
        $page = isset($_GET['page']) ? $_GET['page'] : '';
        $import = isset($_GET['import']) ? $_GET['import'] : false;
        if ($page === '301options' && $import == true) {
            if (!empty($_FILES['upload_file']['tmp_name'])) {
                $fileContent = json_decode(file_get_contents($_FILES['upload_file']['tmp_name']), true);
                if (!empty($fileContent)) {
                    $results = $this->process_data($fileContent);
                    $_SESSION['simple_301_redirects_import_info'] = json_encode($results);
                } 
            }
        }
    }

攻击者可以使用它来设置重定向,拒绝访问易受攻击的 WordPress 站点,导致可用性损失,和/或将站点访问者重定向到恶意站点以进一步感染受害者的计算机。


除了新实现的导入功能之外,插件的更新版本还实现了通过wp-admin仪表板中的提示安装他们开发的其他插件的功能,例如BetterLinks。 为了提供此功能,插件注册了 AJAX 操作 wp_ajax_simple301redirects/admin/install_plugin,该操作与 install_plugin 函数挂钩。

 add_action('wp_ajax_simple301redirects/admin/activate_plugin', [$this, 'activate_plugin']);

install_plugin 函数可用于通过提供所需插件的名称作为“slug”参数来安装 WordPress 存储库中的任何插件。 该函数没有能力检查来验证操作是否由经过身份验证的用户触发,尽管它确实有一个随机数检查。

     public function install_plugin()
    {
        check_ajax_referer('wp_rest', 'security');
        $slug = isset($_POST['slug']) ? $_POST['slug'] : '';
        $result = \Simple301Redirects\Helper::install_plugin($slug);
        if (is_wp_error($result)) {
            wp_send_json_error($result->get_error_message());
        }
        wp_send_json_success(__('Plugin is installed successfully!', 'simple-301-redirects'));
        wp_die();
    }

不幸的是,这个 nonce 检查使用了 wp_rest 动作进行验证。 由于这实际上是一个 REST-API 随机数,用户可以使用 rest-nonce AJAX 操作生成一个有效的随机数,该动作是 WordPress 核心的一部分,并向任何经过身份验证的用户开放。 这使得用户可以通过 nonce 验证并使用插件安装功能。

此外,经过身份验证的用户可以通过使用与 activate_plugin 函数挂钩的 wp_ajax_simple301redirects/admin/activate_plugin AJAX 端点来激活已安装的插件或站点上安装的任何其他插件。

    public function activate_plugin()
    {
        check_ajax_referer('wp_rest', 'security');
        $basename = isset($_POST['basename']) ? $_POST['basename'] : '';
        $result = activate_plugin($basename, '', false );
        if (is_wp_error($result)) {
            wp_send_json_error($result->get_error_message());
        }
        if ($result === false) {
            wp_send_json_error(__('Plugin couldn\'t be activated.', 'simple-301-redirects'));
        }
        wp_send_json_success(__('BetterLinks is activated!', 'simple-301-redirects'));
        wp_die();

这些功能将使经过身份验证的攻击者能够安装和激活 WordPress 存储库中的任何插件,其中可能存在更严重的漏洞,可用于进一步感染易受攻击站点并提升权限。


除了安装和激活插件外,经过身份验证的用户还可以触发 wp_ajax_simple301redirects/admin/wildcardwp_ajax_simple301redirects/admin/get_wildcard AJAX 操作,可用于设置“通配符”值,用于控制重定向的范围应用到任意值,并检索通配符的当前值。

这些动作钩子的对应函数,get_wildcardwildcard,没有能力检查,并且遭受与任意插件安装和激活 AJAX 函数相同的随机数缺陷。

结论

在今天的帖子中,我们详细介绍了 BetterLinks 的 Simple 301 Redirects 中的几个缺陷,这些缺陷使未经身份验证的攻击者能够将站点的所有访问者重定向到外部恶意站点,此外还允许经过身份验证的攻击者能够安装和激活任意插件。这些缺陷已在 2.0.4 版中完全修补。我们建议用户立即更新到可用的最新版本,即本文发布时的 2.0.4 版。

声明:本站带有” 原 “字文章,均为本站作者原创发布。原创文章任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站作者内容侵犯了原著者的合法权益,可联系我们进行处理。

文章来源 wordfence https://www.wordfence.com/blog/2021/05/severe-vulnerabilities-patched-in-simple-301-redirects-by-betterlinks-plugin/

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务

  • 软件商用保障
    正版采购,正规版权
  • 终身SVIP
    一次购买,终身受益
  • 海量资源
    教程、主题、插件一应俱全
  • 高效学习
    多位资深大佬,坐台解答
  • 信用保证
    数百万站长和用户的选择