> For the complete documentation index, see [llms.txt](https://beafn28.gitbook.io/beafn28/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beafn28.gitbook.io/beafn28/web-security/laboratorios-portswigger/oauth-authentication.md).

# OAuth authentication

## Lab: Authentication bypass via OAuth implicit flow

### Enunciado

Este laboratorio utiliza un servicio OAuth para permitir que los usuarios inicien sesión con su cuenta de redes sociales. Una validación incorrecta en la aplicación cliente hace posible que un atacante inicie sesión en la cuenta de otros usuarios sin conocer su contraseña. Inicia sesión en la cuenta de Carlos. Su dirección de correo electrónico es: `carlos@carlos-montoya.net`

Puedes iniciar sesión con tu propia cuenta de redes sociales usando las siguientes credenciales:

* **Usuario:** `wiener`
* **Contraseña:** `peter`

### Resolución

Nos logueamos y nos autenticamos.

<figure><img src="/files/6vSFuXrQecypRQc3jYE6" alt=""><figcaption></figcaption></figure>

En este flujo OAuth, el access token se envía al cliente a través del navegador como fragmento de URL, y el cliente lo recoge con JavaScript.

Para mantener la sesión tras cerrar la página, la aplicación suele enviar el ID de usuario y el access token al servidor mediante una petición POST. El servidor entonces asigna una cookie de sesión.

Pero el problema es que el servidor confía en estos datos sin validarlos bien, ya que no tiene una contraseña para comparar.

En el "implicit flow", esta petición POST es visible y manipulable en el navegador. Si la aplicación no valida que el access token corresponde al usuario indicado, un atacante puede modificar el parámetro email y suplantar a otro usuario.

Los pasos del ataque son cerrar sesión, iniciar sesión de nuevo, y en la petición POST a **/authenticate** cambiar el parámetro `email` a `carlos@carlos-montoya.net`.

<figure><img src="/files/JufUYR33RuWOCJs7KXkO" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/eXO3m5MHG8D8t88jcHO2" alt=""><figcaption></figcaption></figure>
