mediumCWE-352A01:2021

Sin CSRF en Server Actions

Los Server Actions ejecutados sin validar el origen permiten que sitios maliciosos disparen acciones en nombre de usuarios autenticados.

Cómo Funciona

Los Server Actions de Next.js son requests POST bajo el hood. Si no verificas el header Origin, cualquier sitio puede hacer POST a tu URL y el servidor ejecutará la acción usando la cookie de sesión de la víctima. Es CSRF clásico aplicado al patrón nuevo de Server Actions.

Código Vulnerable
// MAL: sin verificar origen — cualquier sitio puede disparar esto
export async function eliminarCuenta(formData: FormData) {
  'use server';
  const userId = formData.get('userId');
  await db.users.delete({ where: { id: userId } });
}
Código Seguro
// BIEN: verifica el origen antes de ejecutar acciones sensibles
export async function eliminarCuenta(formData: FormData) {
  'use server';
  const headersList = headers();
  const origin = headersList.get('origin');
  if (origin !== process.env.NEXT_PUBLIC_APP_URL) {
    throw new Error('Prohibido');
  }
  const userId = formData.get('userId');
  await db.users.delete({ where: { id: userId } });
}

Ejemplo Real

Cualquier acción autenticada — borrar cuenta, cambiar email, resetear contraseña — puede dispararse embebiendo un form oculto en una página maliciosa. La víctima solo necesita visitarla mientras está logueada.

Cómo Prevenirlo

  • Verifica el header Origin o Referer al inicio de cada Server Action sensible
  • Usa next-csrf o un token CSRF en cookie para el patrón double-submit
  • Configura SameSite=Strict o SameSite=Lax en las cookies de sesión
  • Pide re-autenticación (contraseña) para acciones destructivas como eliminar cuenta

Tecnologías Afectadas

Next.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas