# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://beafn28.gitbook.io/beafn28/web-security/laboratorios-portswigger/oauth-authentication.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
