mediumCWE-778A01:2021

Sin Confirmación para Acciones Críticas

Las acciones destructivas o irreversibles (eliminar cuenta, transferir fondos, cambiar email) sin un paso de confirmación son vulnerables a CSRF y clics accidentales.

Cómo Funciona

Un ataque CSRF engaña al navegador de un usuario autenticado para que haga una request a tu app. Sin un paso de confirmación que requiera re-autenticación o un token CSRF, un link malicioso puede eliminar la cuenta del usuario o vaciar su saldo. La confirmación también previene acciones destructivas accidentales.

Código Vulnerable
// MAL: eliminación de cuenta sin confirmación ni re-autenticación
export async function DELETE(req: Request) {
  const { userId } = await getSession(req);
  await db.users.delete({ id: userId }); // un click = cuenta eliminada
  return Response.json({ deleted: true });
}
Código Seguro
// BIEN: requiere re-ingreso de contraseña para acciones destructivas
export async function DELETE(req: Request) {
  const { userId } = await getSession(req);
  const { password } = await req.json();
  const user = await db.users.findById(userId);
  if (!await bcrypt.compare(password, user.passwordHash))
    return Response.json({ error: 'Contraseña incorrecta' }, { status: 403 });
  await db.users.delete({ id: userId });
  return Response.json({ deleted: true });
}

Ejemplo Real

Múltiples apps han tenido vulnerabilidades CSRF de eliminación de cuenta reportadas en HackerOne donde un link malicioso enviado a un usuario autenticado podía desencadenar la eliminación inmediata de la cuenta con una sola request GET.

Cómo Prevenirlo

  • Requiere confirmación de contraseña para eliminación de cuenta, cambios de email y cambios de método de pago
  • Usa POST con tokens CSRF para todas las operaciones que cambien estado — nunca GET para acciones destructivas
  • Agrega un tiempo de espera (por ejemplo, período de gracia de 7 días) para la eliminación de cuenta con un link de cancelación
  • Muestra un modal de confirmación claro con las consecuencias explicadas antes de acciones irreversibles

Tecnologías Afectadas

javascript

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas