highCWE-352A07:2021

OAuth Sin Parámetro State

Flujo de autorización OAuth implementado sin un parámetro `state` aleatorio, permitiendo ataques CSRF que vinculan la cuenta de una víctima con la identidad OAuth del atacante.

Cómo Funciona

El parámetro `state` de OAuth es un valor aleatorio que generas, incluyes en la URL de autorización y verificas cuando regresa el callback. Sin él, un atacante puede iniciar un flujo OAuth, obtener la URL del callback (antes de completar el login) y enviársela a una víctima. La víctima hace clic, completa OAuth y su cuenta queda vinculada a la identidad social del atacante.

Código Vulnerable
// MAL: redirección OAuth sin state
export async function GET() {
  const authUrl = `https://github.com/login/oauth/authorize?client_id=${CLIENT_ID}&scope=user`;
  return Response.redirect(authUrl);
}
Código Seguro
// BIEN: genera y verifica el parámetro state
export async function GET(req: Request) {
  const state = crypto.randomUUID();
  // Guarda el state en la sesión para verificarlo después
  const session = await getSession();
  session.oauthState = state;
  await session.save();
  const authUrl = `https://github.com/login/oauth/authorize?client_id=${CLIENT_ID}&state=${state}&scope=user`;
  return Response.redirect(authUrl);
}

Ejemplo Real

Las implementaciones de OAuth de Facebook, Twitter y GitHub en apps de terceros han tenido vulnerabilidades por falta del parámetro state reportadas. La explotación exitosa significa que un atacante puede vincular su cuenta de GitHub a la cuenta de la víctima en tu app, obteniendo acceso.

Cómo Prevenirlo

  • Siempre genera un parámetro state criptográficamente aleatorio (usa crypto.randomUUID() o nanoid)
  • Guarda el state en la sesión del usuario antes de redirigir al proveedor OAuth
  • En el callback, verifica que el state devuelto coincida exactamente con el guardado
  • Usa una librería OAuth (next-auth, passport.js) que maneje la gestión del state por ti

Tecnologías Afectadas

nodejsNext.jsPython

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas