Redirection for Contact Form 7插件已修补了严重漏洞 建议升级2.3.5以上版本

Redirection for Contact Form 7插件已修补了严重漏洞 建议升级2.3.5以上版本

2021年2月11日,Wordfence威胁情报小组负责任地披露了Redirection for Contact Form 7的多个漏洞,该插件是Contact Form 7的一个扩展组件,目前已有超过200,000个站点使用。这些缺陷之一使未经身份验证的攻击者有可能为任何功能生成任意随机数。第二个缺陷使经过身份验证的攻击者可以安装任意插件并注入PHP对象。第三个缺陷使经过身份验证的攻击者可以删除运行该插件的网站上的任意文章,从而导致可用性降低。

这些被认为是严重的漏洞。因此,我们强烈建议立即更新到可用的最新修补程序版本2.3.5。

Wordfence Premium用户在2021年2月11日收到了防火墙规则,以防止针对这些漏洞的任何攻击。仍在使用免费版Wordfence的网站在2021年3月13日也获得了相同的保护。


Description: Unauthenticated Arbitrary Nonce Generation
Affected Plugin: Redirection for Contact Form 7
Plugin Slug: wpcf7-redirect
Affected Versions: <= 2.3.3
CVE ID: CVE-2021-24278
CVSS Score: 5.3 (Medium)
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Fully Patched Version: 2.3.4

Redirection for Contact Form 7是一个旨在将重定向功能加入到用于创建联系表单的流行的Contact Form 7插件,以便用户可以在提交表单后立即进行重定向。该插件提供了多种功能,例如自定义重定向,导入设置等功能。

在查看插件的代码时,我们发现了nopriv AJAX动作,该动作实际上未在插件中的任何地方使用wp_ajax_nopriv_wpcf7r_get_nonce,该动作已挂钩到wpcf7r_get_nonce函数并可以生成随机数。

add_action( 'wp_ajax_nopriv_wpcf7r_get_nonce', array( $this, 'wpcf7r_get_nonce' ) );
add_action( 'wp_ajax_wpcf7r_get_nonce', array( $this, 'wpcf7r_get_nonce' ) );
public function wpcf7r_get_nonce() {
        $nonce_action = isset( $_POST['param'] ) && wp_unslash( sanitize_text_field( $_POST['param'] ) ) ? wp_unslash( sanitize_text_field( $_POST['param'] ) ) : '';
 
        $nonce = wp_create_nonce( $nonce_action );
 
        wp_send_json_success( array( 'nonce' => $nonce ) );
    }

更具体地说,用户可以在触发AJAX操作时将param设置为任何值。然后将param值作为动作值提供给wp_create_nonce()函数,并为任意动作创建有效的随机数,不管用户是否已登录,因为使用了noprivAJAX动作。然后,该函数会将新生成的随机数返回给用户。

乍一看,这似乎不是一个重大漏洞。但是,WordPress存储库中有许多插件在执行访问控制时会不安全地使用随机数检查代替功能检查。不幸的是,这意味着任何未经身份验证的用户都可以使用此任意随机数生成漏洞来创建有效的随机数。然后,有效的随机数可以授予他们访问任何使用随机数检查作为访问控制唯一手段的插件中的敏感功能的权限。

攻击者可以利用此随机数生成漏洞执行大量恶意操作,包括完全站点接管,具体取决于站点上安装了哪些其他插件。


Description: Authenticated Arbitrary Plugin Installation
Affected Plugin: Redirection for Contact Form 7
Plugin Slug: wpcf7-redirect
Affected Versions: <= 2.3.3
CVE ID: CVE-2021-24279
CVSS Score: 5.4 (Medium)
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
Fully Patched Version: 2.3.4

Redirection for Contact Form 7提供的一项功能是能够通过其调试导入功能将Contact Form 7表单及其重定向设置以及插件一起导入。不幸的是,该功能实现不安全。

该插件注册了AJAX action wp_ajax_import_from_debug,它与该import_from_debug功能相关。此功能没有功能检查,也没有任何随机数保护,使站点上经过身份验证的用户(包括只有订户级特权的用户)可以触发AJAX操作并使用该功能。

add_action( 'wp_ajax_import_from_debug', array( $this->wpcf7_utils, 'import_from_debug' ) );
public function import_from_debug() {
        $data = isset( $_POST['data'] ) && $_POST['data'] ? $_POST['data'] : '';
 
        if ( $data ) {
            $formdata = unserialize( base64_decode( $data['debug_info'] ) );
 
            $this->install_plugins( json_decode( $formdata['plugins'] ) );
 
            $form_id = $this->import_form( $formdata );
 
            $this->import_actions( $form_id, $formdata['actions'] );
 
        }
    }

执行导入所需的所有数据都可以由用户通过'data'参数作为base64编码的序列化数据提供。如果提供了'data'参数,那么函数将对数据进行base64解码和反序列化,并将数据存储为$formdata。如果'plugins'包含在$formdata中,那么函数将触发install_plugins()函数,该函数将检查请求的插件是否已经安装并激活。如果请求的任何插件尚未安装,那么install_plugins()函数将触发install_plugin()函数来安装并激活它们。

/**
     * Install and activate a plugin
     *
     * @return void
     */
    public function install_plugin( $plugin_slug ) {
 
        $api = plugins_api(
            'plugin_information',
            array(
                'slug'   => basename( $plugin_slug, '.php' ),
                'fields' => array(
                    'short_description' => false,
                    'sections'          => false,
                    'requires'          => false,
                    'rating'            => false,
                    'ratings'           => false,
                    'downloaded'        => false,
                    'last_updated'      => false,
                    'added'             => false,
                    'tags'              => false,
                    'compatibility'     => false,
                    'homepage'          => false,
                    'donate_link'       => false,
                ),
            )
        );
 
        if ( ! is_wp_error( $api ) ) {
            $upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact( 'title', 'url', 'nonce', 'plugin', 'api' ) ) );
 
            $upgrader->install( $api->download_link );
 
            if ( ! is_wp_error( $upgrader->skin->api ) ) {
                return activate_plugin( $plugin_slug );
            } else {
                return $upgrader->skin->api;
            }
        } else {
            return $api;
        }

这意味着具有最小权限的经过身份验证的用户(例如订阅者)可以使用此漏洞从WordPress插件库中安装任何插件。攻击者可以使用此工具来安装包含未公开漏洞或其他漏洞的插件,然后使用它们来接管站点。例如,他们可以安装一个不安全地使用随机数保护进行访问控制的插件,并将其与上一个随机数生成漏洞结合使用,以进一步利用站点。


Description: Authenticated PHP Object Injection
Affected Plugin: Redirection for Contact Form 7
Plugin Slug: wpcf7-redirect
Affected Versions: <= 2.3.3
CVE ID: CVE-2021-24280
CVSS Score: 7.5 (High)
CVSS Vector: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
Fully Patched Version: 2.3.4

除了任意插件安装漏洞之外,该import_from_debug函数还容易受到PHP对象注入攻击。如前所述,该import_from_debug函数将用户提供的'data'参数作为已序列化和base64编码的数据。提供后,函数base64解码并反序列化此数据。

public function import_from_debug() {
        $data = isset( $_POST['data'] ) && $_POST['data'] ? $_POST['data'] : '';
 
        if ( $data ) {
            $formdata = unserialize( base64_decode( $data['debug_info'] ) );
 
            $this->install_plugins( json_decode( $formdata['plugins'] ) );
 
            $form_id = $this->import_form( $formdata );
 
            $this->import_actions( $form_id, $formdata['actions'] );
 
        }
    }

反序列化用户提供的数据使用户可以在请求中提供PHP对象,以触发其他PHP类的执行。不幸的是,这意味着如果有适当的魔术方法,攻击者可以执行远程代码执行和任意文件创建之类的事情来完全接管易受攻击的WordPress网站。

我们在该插件中未发现任何有助于进一步利用此漏洞的可用魔术方法,但是,这个可安装任意插件的漏洞可用于安装包含可用魔术方法的插件,从而创建完整的POP链供攻击者利用。

魔术方法是一种特殊的PHP函数,已添加到类中,以在满足某些条件(例如反序列化数据)时执行操作。魔术方法通常用于执行删除文件,创建文件,执行命令等操作,这就是为什么它们与PHP对象注入漏洞一起用于在目标站点的服务器上执行有害操作的原因。有关PHP对象注入和魔术方法如何工作的更多信息,请参见这篇文章。


Description: Authenticated Arbitrary Post Deletion
Affected Plugin: Redirection for Contact Form 7
Plugin Slug: wpcf7-redirect
Affected Versions: <= 2.3.3
CVE ID: CVE-2021-24281
CVSS Score: 4.2 (Medium)
CVSS Vector: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L
Fully Patched Version: 2.3.4

Redirection for Contact Form 7将重定向和其他功能注册为“actions”。您可以随时轻松地从任何联系表单中创建,复制和删除这些操作。为了提供删除功能,插件注册了wp_ajax_wpcf7r_delete_action与该delete_action_post功能挂钩的AJAX动作。

add_action( 'wp_ajax_wpcf7r_delete_action', array( $this->wpcf7_utils, 'delete_action_post' ) );
/**
     * Delete an action
     */
    public function delete_action_post() {
        $data = isset( $_POST['data'] ) ? $_POST['data'] : '';
 
        $response['status'] = 'failed';
 
        if ( $data ) {
            foreach ( $data as $post_to_delete ) {
                if ( $post_to_delete ) {
                    wp_trash_post( $post_to_delete['post_id'] );
                    $response['status'] = 'deleted';
                }
            }
        }
 
        wp_send_json( $response );
    }

该delete_action_post函数检查dataPOST参数,如果数据包含“ post_id”,它将使用该wp_trash_post()函数删除相应的post ID。

不幸的是,没有对此操作进行功能检查,也没有任何随机数保护,这使得任何经过身份验证的用户(包括那些拥有最低权限的用户,如订阅者)都可以删除易受攻击的WordPress网站上的任何文章。这可能会导致可用性降低。


Description: Unprotected AJAX Actions
Affected Plugin: Redirection for Contact Form 7
Plugin Slug: wpcf7-redirect
Affected Versions: <= 2.3.3
CVE ID: CVE-2021-24282
CVSS Score: 5.0 (Medium)
CVSS Vector: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:L
Fully Patched Version: 2.3.4

除了上面详述的四个漏洞外,还有一些剩余的AJAX操作不受功能检查和随机数的保护,从而使较低级别的用户可以执行它们。其余的AJAX动作的严重性要低得多,但是,攻击者可以执行诸如重置插件设置,添加动作,删除动作等操作。

结论

在今天的文章中,我们详细介绍了Redirection for Contact Form 7中的几个缺陷,这些缺陷使攻击者能够生成随机数,安装任意插件,删除任意帖子以及注入PHP对象来执行代码。这些漏洞已在2.3.4版中完全修复。我们建议用户立即更新到可用的最新版本,本文发布时的最新版本为2.3.5。

Wordfence Premium用户在2021年2月11日收到了针对这些漏洞的防火墙规则,而仍在使用免费版本Wordfence的用户在2021年3月13日也获得了相同的保护。

如果您认识在其网站上使用此插件的朋友或同事,我们强烈建议将此建议转发给他们,以帮助保护他们的网站,因为这些漏洞很严重,可能导致整个网站被接管。

阅读全文
常见问题
下载地址失效了怎么版?
客服会第一时间检查下载地址,并发送到您的注册邮箱。如未及时处理可联系客服QQ或邮箱。
导入演示被中断了想重新导入怎么办?
https://themege.net/23822.html
不懂导入演示数据?无法一键导入演示数据?
https://themege.net/16186.html
原文链接:https://themege.net/14315.html,转载请注明出处。
0

评论0

请先