首页 >> 网络安全 >>漏洞利用 >> WooCommerce Booster中修补的关键身份验证绕过漏洞
详细内容

WooCommerce Booster中修补的关键身份验证绕过漏洞

时间:2021-08-30        阅读

2021 年 7 月 30 日,Wordfence 威胁情报团队针对我们在Booster for WooCommerce 中发现的漏洞启动了负责任的披露流程,该漏洞是安装在 80,000 多个站点上的 WordPress 插件。只要在插件中启用了某些选项,这个缺陷就可以让攻击者以任何用户身份登录。


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


我们最初于 2021 年 7 月 30 日联系了插件供应商。几天后,即 2021 年 8 月 2 日,我们收到了有关适当沟通渠道的确认后,我们提供了完整的披露细节。供应商很快承认了该报告,并于 2021 年 8 月 11 日发布了 5.4.4 版补丁。


我们强烈建议立即更新到最新的 WooCommerce Booster 补丁版本,即发布时的 5.4.4 版。

说明:身份验证绕过

受影响的插件:WooCommerce

插件的助推器Slug: woocommerce-jetpack

受影响的版本: <= 5.4.3

CVE ID: CVE-2021-34646

CVSS 分数: 9.8(严重)

CVSS 向量: CVSS:3.1/AV:N/ AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

研究员/s: Chloe Chamberland

全补丁版本: 5.4.4

WooCommerce Booster 是 WooCommerce 的一个插件插件,旨在通过使用网站所有者可以随时启用和禁用的各种模块来增强其功能。该插件提供的一个模块是“电子邮件验证”模块,它要求用户在网站上注册后验证他们的电子邮件。


不幸的是,我们发现此功能的实现并不安全,这使得攻击者可以冒充任何用户并发送验证请求,从而允许攻击者轻松重新创建“验证”目标用户电子邮件所需的令牌,并自动以该用户身份登录。


仔细研究漏洞利用

为了利用此漏洞,攻击者需要执行两个操作。攻击者需要执行的第一个操作包括向易受攻击的站点的主页 URL 发送请求,并将wcj_user_id 参数设置为攻击者想要模拟的用户 ID。这可能会设置为用户 ID 1,因为通常在 WordPress 站点上创建的第一个用户帐户是管理用户帐户,并且很少更改。

} elseif ( isset( $_GET['wcj_user_id'] ) ) {
    $this->reset_and_mail_activation_link( $_GET['wcj_user_id'] );
    wc_add_notice( do_shortcode( wcj_get_option( 'wcj_emails_verification_email_resend_message',
        __( '<strong>Success:</strong> Your activation email has been resent. Please check your email.', 'woocommerce-jetpack' ) ) ) );
}

一旦请求被发送,该reset_and_mail_activation_link()函数就被触发。这检索了所提供的user_id并为用户生成了一个用于验证电子邮件地址的代码。然后,该函数触发了一封电子邮件,该电子邮件带有生成的验证链接,可用于验证电子邮件地址。


漏洞的核心就在这里,验证码只是请求时间的 MD5 哈希值。这使得攻击者可以根据他们向任何给定用户发送验证请求的时间,轻松地重新创建有效的验证码,而无需访问目标用户的电子邮件帐户。

function reset_and_mail_activation_link( $user_id ) {
    $user_info     = get_userdata( $user_id );
    $code          = md5( time() );
    $url           = add_query_arg( 'wcj_verify_email', base64_encode( json_encode( array( 'id' => $user_id, 'code' => $code ) ) ), wc_get_page_permalink( 'myaccount' ) );
    $email_content = do_shortcode( apply_filters( 'booster_option',
        __( 'Please click the following link to verify your email:<br><br><a href="%verification_url%">%verification_url%</a>', 'woocommerce-jetpack' ),
        get_option( 'wcj_emails_verification_email_content',
            __( 'Please click the following link to verify your email:<br><br><a href="%verification_url%">%verification_url%</a>', 'woocommerce-jetpack' ) ) ) );
    $email_content = str_replace( '%verification_url%', $url, $email_content );
    $email_subject = do_shortcode( apply_filters( 'booster_option',
        __( 'Please activate your account', 'woocommerce-jetpack' ),
        get_option( 'wcj_emails_verification_email_subject',
            __( 'Please activate your account', 'woocommerce-jetpack' ) ) ) );
    update_user_meta( $user_id, 'wcj_is_activated', '0' );
    update_user_meta( $user_id, 'wcj_activation_code', $code );

一旦攻击者为他们的目标用户发送了电子邮件验证请求,他们就需要执行第二个操作,包括制作 URL 以“验证”电子邮件。这将是站点的主页 URL,其wcj_verify_email 参数设置为 base64 JSON 编码的有效负载,其中 JSON 编码的正文包含设置为 ` id` 值的目标用户 ID和code设置为生成的时间的 MD5 哈希值的 ` ` 值已发出电子邮件验证请求。


如果该wcj_emails_verification_redirect_on_success选项设置为 yes 并且wcj_verify_email 参数中发送的数据有效,则wp_set_current_user和wp_set_auth_cookie函数将作为目标用户运行并生成经过身份验证的会话,从而允许攻击者绕过任何身份验证并访问他们选择的任何帐户。

} elseif ( isset( $_GET['wcj_verify_email'] ) ) {
    $data = json_decode( base64_decode( $_GET['wcj_verify_email'] ), true );
    if ( ! empty( $data['id'] ) && ! empty( $data['code'] ) && get_user_meta( $data['id'], 'wcj_activation_code', true ) == $data['code'] ) {
        update_user_meta( $data['id'], 'wcj_is_activated', '1' );
        if ( 'yes' === wcj_get_option( 'wcj_emails_verification_redirect_on_success', 'yes' ) ) {
            wp_set_current_user( $data['id'] );
            wp_set_auth_cookie( $data['id'] );
        }
        $url = ( '' != ( $custom_url = wcj_get_option( 'wcj_emails_verification_redirect_on_success_custom_url', '' ) ) ? $custom_url : wc_get_page_permalink( 'myaccount' ) );
        wp_safe_redirect( add_query_arg( 'wcj_verified_email', $_GET['wcj_verify_email'], $url ) );
        exit;

因此,攻击者可以利用此漏洞在运行易受攻击的插件版本的站点上获得管理访问权限,并有效地接管该站点。


此漏洞需要启用“电子邮件验证”模块并启用“成功验证后登录用户”设置(默认情况下),才能在运行插件的站点上成功利用。


披露时间表

  • 2021 年 7 月 30 日 –插件分析的结论导致在 Booster for WooCommerce WordPress 插件中发现身份验证绕过漏洞。我们开发了防火墙规则来保护 Wordfence 客户并将其发布给 Wordfence Premium 用户。我们开始与插件供应商联系。

  • 2021 年 8 月 2 日 –供应商确认用于处理披露的收件箱。我们发送完整的披露细节。

  • 2021 年 8 月 4 日——供应商确认他们已收到详细信息,并将开始着手修复。

  • 2021 年 8 月 11 日 –发布了包含足够补丁的插件的最新更新版本。

  • 2021 年 8 月 29 日 - Wordfence 免费用户收到防火墙规则。


结论

在今天的帖子中,我们详细介绍了 WooCommerce Booster 中的一个缺陷,该缺陷使攻击者能够绕过身份验证并以任何现有站点用户(包括管理用户)身份登录,这些用户可用于接管易受攻击的 WordPress 站点。此漏洞已在 5.4.4 版中完全修补。我们建议 WordPress 用户立即更新到可用的最新版本,即本文发布时的 5.4.4 版。


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


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


ots网络logo

OTS网络安全门户主要提供网络信息安全教程、文章、工具,让更多的小伙伴加入我们的社区一起学习。

技术支持: 建站ABC | 管理登录