Entrada

Authentication bypass via OAuth implicit flow

Laboratorio de Portswigger sobre OAuth

Authentication bypass via OAuth implicit flow

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio utiliza un servicio OAuth para permitir que los usuarios inicien sesión con sus cuentas de redes sociales. Una validación defectuosa por parte del cliente hace posible que un atacante inicie sesión en las cuentas de otros usuarios sin conocer sus contraseñas

Para resolver el laboratorio, debemos iniciar sesión en la cuenta de Carlos, su dirección de correo electrónico es carlos@carlos-montoya.net. Podemos iniciar sesión en nuestra cuenta usando 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

Cuando pulsamos sobre My account accedemos a /my-account y nos hace un redirect a /social-login donde nos muestra esto

Posteriormente nos redirige a este panel de login, donde nos podemos loguear con las credenciales wiener:peter

Posteriormente nos redirige a esta otra ventana donde nos solicita permiso para acceder a nuestro perfil e 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 token lo cual quiere decir que estamos ante un implicit grant type. Además de esto también podemos ver el nombre de host del servidor de autorización, en este caso es oauth-0a97004f04bdd3a98266d60502d800fe.oauth-server.net

Si tenemos el nombre de host del servidor de autorización podemos enumerar estos endpoints para obtener información que puede resultarnos útil, es recomendable hacer esto porque puede revelar una superficie de ataque más amplia o características admitidas que no se mencionan en la documentación. En este caso es la única opción debido a que Portswigger no cuenta con una API pública y por lo tanto, tampoco cuenta con documentación de la que obtener información interesante

1
2
/.well-known/oauth-authorization-server  
/.well-known/openid-configuration  

Si hacemos una petición GET a /.well-known/oauth-authorization-server vemos que no existe

Sin embargo, si hacemos una petición GET a /.well-known/openid-configuration obtenemos información valiosa

Si nos fijamos en la petición hecha a /authenticate vemos que se están enviando tres campos

Cambiamos nuestro email por carlos@carlos-montoya.net

Pulsamos click dererecho > Request in browser > In original session

Si accedemos a My account vemos que hemos accedido a la cuenta del usuario carlos

Esta entrada está licenciada bajo CC BY 4.0 por el autor.