WordPress Hosting

Reinicio de contraseña de admin en WP 2.8.3 y previas (actualizado)

llave wordpress

Si aún te preguntas porque debes actualizar WordPress a la nueva versión, actualmente la 2.8.3, debes saber que las versiones anteriores tienen un fallo de seguridad que puede facilitar que alguien – malintencionadamente – reinicie la contraseña del administrador (sea el nombre de usuario ‘admin’ u otro) aún sin un email válido autorizado.

Es tan sencillo como hacer lo siguiente:

Se envía un cambio de dirección de email o nombre de usuario a través de este formulario:

/wp-login.php?action=lostpassword ;

Wordpress envía una confirmación para reiniciarlo a través del típico email:

»
Alguien ha solicitado reiniciar la contraseña del siguiente sitio y usuario.
http://DOMAIN_NAME.TLD/wordpress
Username: admin
Para reiniciar tu contraseña visita la siguiente dirección, en caso contrario simplemente ignora este email y no pasará nada

http://DOMAIN_NAME.TLD/wordpress/wp-login.php?action=rp&key=o7naCKN3OoeU2KJMMsag
»

Si se hace clic en el enlace WordPress reinicia la contraseña de administrador y envía otro email con los nuevos datos de acceso.

Así es como funciona:

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($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
$errors = new WP_Error();
if ( isset($_GET['key']) )
    $action = 'resetpass';
// validate action so as to default to the login screen
if ( !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($_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 ]...

Puedes incluso reiniciar la clave de admin enviando un array a la variable $key.

Puedes incluso hacer una prueba de concepto. Solo necesitas el navegador web para reproducirlo:

http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key[]=

La contraseña se reiniciará sin confirmación alguna.

Da miedo ¿verdad?, pues actualiza coño., pues revisa lo que viene a continuación … 

Actualización: esta vulnerabilidad también afecta a la versión 2.8.3 y se puede solucionar como indica Martín:

Abre el fichero wp-login.php y su sustituye esta línea …

if ( empty( $key )  )

por esta otra …

if ( empty( $key ) || is_array( $key ) )

Si por cualquier motivo no te funciona este «hack» prueba a bajar la versión modificada del archivo wp-login.php del trac, con el problema solucionado, como ha hecho Ferticidio.

Esta vulnerabilidad ya la están aprovechando varios indeseables que no tienen nada mejor que hacer así que no te lo tomes a la ligera.

Compártelo en tus redes
Resúmelo con tu IA

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en las estrellas para valorarlo!

Promedio de puntuación 0 / 5. Total de votos: 0

¡Todavía no hay votos! Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación hace 3 años o más que no se actualiza. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado. ¡Ah! ¿te sirvió?, pues entonces nada :-)


Sobre el autor

29 comentarios en “Reinicio de contraseña de admin en WP 2.8.3 y previas (actualizado)”

  1. ¿Para actualizar de 2.8.2 a 2.8.3 es necesario subir todos los archivos o sólo algunos?

  2. Acabo de probarlo con un blog que tengo, el Dashboard dice You are using WordPress 2.8.3. y aún asi pude reinciarle la contraseña sin necesidad del email de validación.

    Será que el wordpress 2.8.3 también es vulnerable??

    1. Buena pregunta, yo tampoco uso el usuario 'admin' por defecto pero no lo he probado. Por si acaso aplica el hack por si las moscas o limita el acceso por IP como explicaba ayer. Para probar siempre hay tiempo.

      1. Rafael P. Campoamor

        A mi me han hecho el hack y mi único usuario administrador no se llama admin, de hecho 'admin' no existe en mi blog…

  3. piernodoyuna

    Perdonad por mi ignorancia, se supone que el problema es solo si el administrador tiene como nick "admin"? Porque si es por eso, no seria mas facil entrar a traves de phpmyadmin y cambiar el nick del administrador en la tabla users?

  4. Yo tampoco tengo el user por default "admin", y aún así salí afectada. Por favor, corrijan. Una pregunta para Fernando, esta vulnerabilidad afecta a versiones 2.7.x?

    En serio, gracias por poner tan fácil la explicación, que hasta yo pude solucionarlo. Mil mil mil gracias.

    1. A mi me bajó rápido el fichero de sustitución. En un blog he recibido el aviso de cambio de clave pero lo he recibido yo afortunadamente, y ya he aplicado el cambio de fichero.

  5. Muchas gracias! Comprobado que eso arregla el agujero de seguridad. Estoy actualizando mis sitios y a seguir propagando esta info. Grande Martín aportando la solución!

  6. @Fernando Tellado…

    No es que la solucion que veo todos estan usando no sea segura, pero se han aumentado los cambios (se ha vuelto mas estricta en esta parte para no solo mitigar el caso de los arreglos cualquier otro), asi que deberian aplicar los cambios 11800 y 11804… ya he dejado en mi comentario anterior como bajar el archivo con los cambios necesarios (asi como ya he posteado informacion al respecto en mi blog) para así solo reemplazar con el actual y parcheado segun el equipo de wordpress (mas bien segun ryan).

    Saludos

  7. Como siempre, gracias, ya actualizé mis blogs al 2.8.4, pero si utilizo /wp-login.php?action=lostpassword ;
    me sigue apareciendo el recuadro para poner mi nombre de usuario y mail.
    ¿hay algun modo de evitarlo?
    Lo que si: http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key%5B%5D= me da una respuesta de "invalid key"

    Bueno esto parece que nos ha puesto a trabajar y actualizarnos bastante más pronto de lo usual.
    Saludos

    Diana

  8. Hola, muy buena la info.

    Me llamó la atención que usaras el termino "indeseables" que usaba yo hace años en mi sitio Seguridad en Internet 2.0, alguna relación?

    Muy bueno el blog

    Saludos!

Los comentarios están cerrados.

Scroll al inicio