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.
// 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 });
}// 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
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Sin Política de Contraseñas
mediumAceptar cualquier contraseña — incluyendo '123' o 'a' — hace las cuentas de usuarios trivialmente vulnerables a credential stuffing y ataques de fuerza bruta.
Sin Rate Limit en Login
mediumUn endpoint de login sin rate limiting puede ser forzado por fuerza bruta miles de veces por segundo hasta encontrar una contraseña válida.
Sin MFA/2FA
lowSin autenticación multifactor, una contraseña robada o adivinada es todo lo que se necesita para comprometer completamente una cuenta.
Sin Verificación de Email
mediumPermitir cuentas con email no verificado deja que atacantes se registren con la dirección de email de otra persona, potencialmente bloqueándolos o suplantándolos.