Entrada

Forced OAuth profile linking

Laboratorio de Portswigger sobre OAuth

Forced OAuth profile linking

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio nos da la opción de vincular un perfil de redes sociales a nuestra cuenta para que podamos iniciar sesión mediante OAuth en lugar de usar el nombre de usuario y la contraseña. Debido a una implementación insegura del flujo OAuth por parte de la aplicación cliente, un atacante puede manipular esta funcionalidad para obtener acceso a las cuentas de otros usuarios

Para resolver el laboratorio, debemos usar un ataque CSRF para vincular nuestro propio perfil de redes sociales a la cuenta del usuario admin y luego acceder al panel de administración y eliminar al usuario carlos

El usuario admin abrirá cualquier cosa que le enviemos desde el servidor de explotación y siempre tiene una sesión activa en la web

Podemos iniciar sesión en nuestras propias cuentas usando las siguientes credenciales

  • Cuenta de la web - wiener:peter

  • Perfil de la red social - peter.wiener:hotdog


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, donde nos podemos loguear con las credenciales wiener:peter

Después de autenticarnos con el método de usuario y contraseña tradicional vemos este panel

Si pulsamos sobre Attach a social profile nos redirigirá a este panel, mediante el cual podemos vincular nuestra cuenta a nuestro perfil de redes sociales proporcionando las credenciales peter.wiener:hotdog

Posteriormente nos redirige a esta otra ventana donde nos solicita permiso para acceder a nuestro perfil e email

Si se ha vinculado de forma exitosa nuestra cuenta a nuestro perfil de redes sociales nos saldrá este mensaje al final

Si accedemos a My account nuevamente veremos que hemos vinculado nuestra cuenta a nuestro perfil de redes sociales

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-0adf007104acce52816878da023d0048.oauth-server.net

Si nos fijamos bien en la petición veremos que el parámetro state no está presente, este parámetro es importante porque almacena un valor único e indescifrable, vinculado a la sesión actual en la aplicación cliente. State funciona como un token CSRF para la aplicación cliente y garantiza que la solicitud al endpoint /callback provenga de la misma persona que inició el flujo OAuth. El servicio OAuth debe devolver este valor exacto en la respuesta junto con el código de autorización

Para explotar el CSRF vamos a dirigirnos a My account y vamos a pulsar en Attach a social profile

Interceptamos la petición con Burpsuite y pulsamos en Forward

La siguiente petición a la anterior es esta. Si pulsamos en Forward se enviará la petición al servidor y el código no será válido debido a que solo podemos usarla una vez, en este caso debemos pulsar en Drop para evitar enviar la petición al servidor

Lo siguiente que debemos hacer es dirigirnos al Exploit server y construir un payload para explotar el CSRF

1
<script> document.location="https://0adf00100344647780030363003e00ed.web-security-academy.net/oauth-linking?code=qTGqnnyYnv4ulLD07J_R-OlVCn8Bw2bJ66FtwkbC47A" </script>

Pulsamos sobre My account > Login with social media y vemos que la cuenta del usuario administrador se ha vinculado a nuestra cuenta de redes sociales

Accedemos al Admin panel y eliminamos la cuenta del usuario carlos

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