A menudo una funcionalidad común en la mayoría de las aplicaciones web es la capacidad de permitir restablecer la contraseña del usuario. La mayoría de las vulnerabilidades en las aplicaciones web aprovechan esa interacción del usuario de formas que inicialmente no fueron pensadas por sus desarrolladores.
Una vulnerabilidad conocida como “Password reset poisoning” aprovecha los encabezados como “Host” y “X-Forwarded-Host” para secuestrar una cuenta de usuario mediante una solicitud http.
El usuario hace clic en el enlace “Olvide mi contraseña” en un sitio web y el servidor envía un enlace de restablecimiento de contraseña a la cuenta de correo electrónico configurada para la cuenta de usuario. El enlace incluye un token único y permite al usuario restablecer la contraseña sin necesidad de especificar la contraseña anterior
Es posible realizar un “Injection” en el enlace enviado al correo electrónico para restablecer la contraseña, esto es posible al modificar el encabezado “Host” o agregando un encabezado “X-Forwarded-Host” en la solicitud mediante Burp Suite para que el servidor utilice este valor en lugar del encabezado “Host” original para construir el enlace en el correo electrónico.
Escenario de ataque
El atacante crea un servidor en la cual recibirá el token, para esto utilizaremos ngrok
El atacante ingresa al sitio web en la seccion “Restablecer contraseña”
El atacante envía una solicitud de restablecimiento de contraseña a la victima (y edita el encabezado “Host” o agrega un encabezado “X-Forwarded-Host” mediante burp suite con un dominio controlado por el atacante “Evil-domain”)
El usuario hace clic en el enlace
El atacante recibe el token de restablecimiento de contraseña en su servidor malicioso
El atacante secuestra la cuenta de usuario.