Fallos de OAuth y de sesiones: cómo se roban cuentas
Guía en castellano sobre fallos de OAuth y gestión de sesiones: redirect_uri mal validado, parámetro state, tokens y cookies.
Qué es
Esta categoría reúne los fallos en cómo una aplicación crea, guarda y delega sesiones. Dos familias aparecen una y otra vez:
- OAuth y "inicia sesión con…": el flujo por el que otra web (Google, GitHub, la propia empresa) te identifica y devuelve un código o un token a la aplicación. Si la aplicación valida mal a dónde se envía ese código, un atacante puede quedárselo y entrar en tu cuenta.
- Gestión de sesiones: tokens que no caducan, sesiones que siguen vivas tras cambiar la contraseña o cerrar sesión, cookies sin las protecciones adecuadas o identificadores de sesión predecibles.
Dónde suele aparecer
- El parámetro
redirect_uri, cuando el servidor acepta variaciones de la dirección registrada (subdominios, rutas o parámetros añadidos) o una redirección abierta dentro del dominio permitido. - El parámetro
stateausente o sin comprobar, que permite vincular tu cuenta a la del atacante (un CSRF en el inicio de sesión). - Tokens en la URL que se filtran por la cabecera
Referer, el historial o los registros. - Vinculación de cuentas sociales a una cuenta existente sin confirmar el correo.
- Cierre de sesión que solo borra la cookie en el navegador pero no invalida la sesión en el servidor.
Cómo se busca
- Recorre el flujo OAuth completo con un proxy y anota cada parámetro:
client_id,redirect_uri,state,response_type,code. - Modifica
redirect_uripoco a poco (otra ruta, otro subdominio, un parámetro extra) y comprueba qué acepta el servidor. - Quita o reutiliza
statey mira si el flujo sigue funcionando. - Para las sesiones: copia el token, cierra sesión o cambia la contraseña, y prueba si el token antiguo sigue sirviendo.
Cómo se evita
- Comparar
redirect_uride forma exacta con la lista registrada. - Exigir y comprobar
state(y usar PKCE, recomendado hoy en todos los clientes). - Códigos de autorización de un solo uso y de vida corta.
- Invalidar en el servidor todas las sesiones al cambiar la contraseña o cerrar sesión, y cookies con
Secure,HttpOnlyySameSite.
Al reportarlo
Muestra la cadena completa con tus propias cuentas: desde el enlace que recibiría la víctima hasta el acceso a su sesión. En OAuth el impacto suele ser la toma de cuenta, y conviene demostrarlo de principio a fin.
Casos reales de OAuth y sesiones
Khan Academy: una expresión regular con puntos sin escapar permitía robar el token de sesión y tomar cuentas con un clic
Un fallo en la regex que valida el parámetro continue dejaba redirigir a un dominio .app del atacante, que recibía el token de transferencia de sesión de la víctima y lo reutilizaba para entrar en su cuenta.
4 min
Taskcluster (Mozilla): los códigos de autorización OAuth2 se podían reutilizar y su caducidad no se comprobaba
El servidor web de Taskcluster no invalidaba los códigos de autorización OAuth2 tras canjearlos y miraba la columna de caducidad equivocada, así que un código filtrado servía para obtener credenciales del usuario una y otra vez.
4 min
curl pierde el atributo Secure de una cookie si va precedido de un tabulador (CVE-2026-80255)
Desde curl 8.13.0, un Set-Cookie con tabulador antes de Secure hace que la cookie se guarde sin ese atributo, y curl la envía después en claro por HTTP al mismo host.
4 min
curl con libpsl deja escapar cookies de un sufijo público a hosts hermanos (CVE-2026-82209)
Si un host que es sufijo público (como github.io) fija una cookie con Domain igual a sí mismo, curl la guarda con alcance de dominio y la envía a cualquier subdominio hermano, como attacker.github.io.
4 min