Password reset poisoning via middleware
SUMMARY
Debemos autenticarnos en el login de un sitio web con la cuenta del usuario carlos. Luego, me doy cuenta de que el sitio web consta con la funcionalidad de Resetear la Contraseña. Además, la lógica que sigue esta funcionalidad es primero ingresar un username o correo electrónico de un usuario valido en un formulario, luego le llega un correo electrónico al usuario ingresado, con una URL que tiene un token asociado a su cuenta, y al darle clic a la URL, eres redireccionado a una página web para resetear tu contraseña. La vulnerabilidad de la lógica de esta funcionalidad radica en que la URL es generada dinámicamente a partir del valor de la cabecera Host de la solicitud POST del primero formulario. Por lo que podemos usar la cabecera X-Forwarded-Host en la solicitud POST para alterar el valor de la cabecera Host, y de esa manera el sitio web le entregaría una URL fraudulenta al usuario carlos en el correo electrónico legitimo. Luego, cuando carlos haga clic en la URL, podremos observar el token en el registro de acceso de nuestro servidor web. Luego, podríamos resetear la contraseña del usuario carlos.
RESOLUCION
En este laboratorio tenemos que autenticarnos exitosamente en un login de un sitio web con el usuario carlos. Para ello la plataforma de PortSwigger (https://portswigger.net/web-security/authentication/other-mechanisms/lab-password-reset-poisoning-via-middleware) nos afirma que se ha implementado la funcionalidad de Restablecer Contraseña. Además, nos indica que el usuario carlos hará clic en cualquier enlace o URL que reciba en los correos electrónicos de su bandeja de entrada. Además, nos proveen las credenciales de un usuario valido. (wiener: peter)
Podemos observar que la funcion para Resetear la Contraseña consta primero de un formulario HTML donde debemos insertar un username o correo electronico valido. Ademas, la solicitud POST realizada en este formulario HTML consta del cabecera Host que tiene un nombre de dominio para indicarle al servidor web hacia que sitio web en especifico va dirigido la solicitud. Luego de la solicitud POST, se envia un correo electronico hacia el usuario. En este caso podemos observar en la bandeja de entrada del usuario wiener, que el correo electronico para resetear su contraseña contiene una URL. Ademas, la URL contiene un token que esta asociada con la cuenta del usuario wiener, y parte de la URL contiene el valor de la cabecera Host. Por lo que podemos deducir que la URL se genera dinamicamente a partir del valor del cabecera Host.
Ahora modificaremos la cabecera Host en la solicitud POST realizada desde el formulario HTML con el fin de insertar el dominio de un servidor web que esta bajo nuestro control, y que es proveido por la misma plataforma. Ademas, la solicitud POST lo realizaremos con el username carlos, para que el correo electronico le llege a la bandeja de entrada del usuario calors. Luego, el usuario carlos dara clic a la URL fraudalenta del correo electronico, y podremos observar el token asociada a su cuenta en el registro de acceso del servidor web que esta bajo nuestro control.
Podemos observar que hemos usado la cabecera X-Forwarded-Host con el fin de indicarle al servidor web destino que el valor original de la cabecera Host es igual al dominio de nuestro servidor web. Ademas, debido a que el codigo de estado de la respuesta HTTP es 200, podemos deducir que el servidor web si admite el uso de esta cabecera.
Ahora observaremos el registro de acceso de nuestro servidor web, que es proveido por la misma plataforma.
Podemos observar que el usuario carlos ha dado clic a la URL fraudalente del correo electronico que le llego, y eso quedo registrado en los registros de acceso de nuestro servidor web. Ademas, podemos el token asociada la cuenta del usuario carlos.
Ahora que conocemos el token de carlos, diesñaremos la estructura correcta de la URL que nos redirrecionara a una pagina web donde podremos resetar la contraseña de la cuenta de carlos.
Podemos observar que logramos acceder a la pagina web para resetear la contraseña de carlos con el fin de poder autenticarnos en el login del sitio web siendo el usuario carlos.
De esta manera logramos resolver el laboratorio.