细说CVE-2024-10924
字数 1091 2025-08-22 12:22:24

CVE-2024-10924漏洞分析与利用教学文档

漏洞概述

CVE-2024-10924是WordPress插件Really Simple SSL中的一个认证绕过漏洞,影响版本9.0.0及以下。该漏洞存在于双因素认证(2FA)的电子邮件验证流程中,允许攻击者在知道有效用户ID的情况下绕过2FA保护。

漏洞成因

漏洞位于security/wordpress/two-fa/class-rsssl-two-factor-on-board-api.php文件的validate_email_setup方法中。

关键问题点:

  1. check_login_and_get_user方法验证失败后没有终止执行流程
  2. 验证失败后仍然使用原始的用户ID参数继续执行
  3. 没有正确检查check_login_and_get_user方法的返回值

漏洞代码分析

问题函数

public function validate_email_setup(WP_REST_Request $request ): WP_REST_Response {
    $parameters = new Rsssl_Request_Parameters( $request );
    $user = $this->check_login_and_get_user( $parameters->user_id, $parameters->login_nonce );
    
    // Check if the provider.
    if ( 'email' !== $parameters->provider ) {
        return new WP_REST_Response( array( 'error' => 'Invalid provider' ), 401 );
    }
    
    if ( !Rsssl_Two_Factor_Email::get_instance()->validate_token( $parameters->user_id, self::sanitize_token($parameters->token) ) ) {
        // we reset all the settings.
        Rsssl_Two_Factor_Email::set_user_status( $parameters->user_id, 'open' );
        Rsssl_Two_Factor_Totp::set_user_status( $parameters->user_id, 'open' );
        // we logout the user
        wp_logout();
        return new WP_REST_Response( array( 'error'Code was was invalid, try "Resend Code"', 'really-simple.ssl-pro') ), 401 );
    }
    
    Rsssl_Two_Factor_Email::set_user_status( $parameters->user_id, 'active' );
    // Mark all other statuses as inactive.
    self::set_other_providers_inactive( $parameters->user_id, 'email' );
    return $this->authenticate_and_redirect( $parameters->user_id, $parameters->redirect_to );
}

验证函数

private function check_login_and_get_user( int $user_id, string $login_nonce ) {
    if ( ! Rsssl_Two_Fa_Authentication::verify_login_nonce( $user_id, $login_nonce ) ) {
        return new WP_REST_Response( array( 'error' => 'Invalid login nonce' ), 403 );
    }
    
    /** 
     * Get the user by the user ID.
     * 
     * @var WP_User $user 
     */
    $user = get_user_by( 'id', $user_id );
    return $user;
}

漏洞利用条件

  1. 目标网站使用Really Simple SSL插件9.0.0或更早版本
  2. 网站启用了电子邮件作为2FA验证方式
  3. 攻击者知道有效的用户ID

漏洞利用步骤

1. 生成token

通过调用以下路由之一生成token:

  • save_default_method_email
  • save_default_method_email_profile

这些路由会调用start_email_validation方法,进而调用generate_token方法生成8位数字token。

2. 暴力破解token

token生成方式:

public function generate_token( int $user_id ): string {
    $token = self::get_code(); // 生成8位数字
    update_user_meta( $user_id, self::RSSSL_TOKEN_META_KEY_TIMESTAMP, time() );
    update_user_meta( $user_id, self::RSSSL_TOKEN_META_KEY, wp_hash( $token ) );
    return $token;
}

wp_hash函数使用MD5加盐算法,盐值来自wp-config.php中的NONCE_SALT等定义。

3. 验证token

调用validate_email_setup路由提交猜测的token。如果token正确,将绕过2FA验证。

利用限制

  1. 时间限制:token有效期为15分钟

    public function user_token_ttl( int $user_id ): int {
        $token_ttl = 15 * MINUTE_IN_SECONDS;
        return (int) apply_filters( 'rsssl_two_factor_token_ttl', $token_ttl, $user_id );
    }
    
  2. 破解难度

    • 需要暴力破解8位数字token
    • 如果无法获取wp-config.php中的salt值,需要尝试约1亿种可能
    • 如果能够获取wp-config.php,可以在本地高效计算hash

修复建议

  1. 立即升级Really Simple SSL插件到最新版本
  2. 官方修复方法:在验证失败后正确终止执行流程

总结

CVE-2024-10924是一个典型的认证逻辑缺陷漏洞,由于验证失败后没有正确终止执行流程,导致可以绕过2FA保护。虽然利用有一定限制(需要知道用户ID和暴力破解token),但仍是一个严重的安全问题。开发者应引以为戒,在编写认证代码时确保验证失败后立即终止后续流程。

CVE-2024-10924漏洞分析与利用教学文档 漏洞概述 CVE-2024-10924是WordPress插件Really Simple SSL中的一个认证绕过漏洞,影响版本9.0.0及以下。该漏洞存在于双因素认证(2FA)的电子邮件验证流程中,允许攻击者在知道有效用户ID的情况下绕过2FA保护。 漏洞成因 漏洞位于 security/wordpress/two-fa/class-rsssl-two-factor-on-board-api.php 文件的 validate_email_setup 方法中。 关键问题点: check_login_and_get_user 方法验证失败后没有终止执行流程 验证失败后仍然使用原始的用户ID参数继续执行 没有正确检查 check_login_and_get_user 方法的返回值 漏洞代码分析 问题函数 验证函数 漏洞利用条件 目标网站使用Really Simple SSL插件9.0.0或更早版本 网站启用了电子邮件作为2FA验证方式 攻击者知道有效的用户ID 漏洞利用步骤 1. 生成token 通过调用以下路由之一生成token: save_default_method_email save_default_method_email_profile 这些路由会调用 start_email_validation 方法,进而调用 generate_token 方法生成8位数字token。 2. 暴力破解token token生成方式: wp_hash 函数使用MD5加盐算法,盐值来自 wp-config.php 中的 NONCE_SALT 等定义。 3. 验证token 调用 validate_email_setup 路由提交猜测的token。如果token正确,将绕过2FA验证。 利用限制 时间限制 :token有效期为15分钟 破解难度 : 需要暴力破解8位数字token 如果无法获取wp-config.php中的salt值,需要尝试约1亿种可能 如果能够获取wp-config.php,可以在本地高效计算hash 修复建议 立即升级Really Simple SSL插件到最新版本 官方修复方法:在验证失败后正确终止执行流程 总结 CVE-2024-10924是一个典型的认证逻辑缺陷漏洞,由于验证失败后没有正确终止执行流程,导致可以绕过2FA保护。虽然利用有一定限制(需要知道用户ID和暴力破解token),但仍是一个严重的安全问题。开发者应引以为戒,在编写认证代码时确保验证失败后立即终止后续流程。