highCWE-602A01:2021

Lógica de Auth Solo en Frontend

Mostrar u ocultar elementos de UI basándose en el rol del usuario en React, sin ninguna validación server-side — fácilmente bypasseable abriendo DevTools.

Cómo Funciona

React renderiza en el cliente. Cualquier `if (user.role === 'admin')` en tu JSX es solo JavaScript que cualquiera puede leer y manipular. Ocultar un botón no protege el endpoint detrás de él. Los atacantes llaman la API directamente, saltándose tu UI por completo.

Código Vulnerable
// MAL: panel admin oculto en UI pero API desprotegida
function Dashboard({ user }) {
  return (
    <div>
      {user.role === 'admin' && <AdminPanel />}
    </div>
  );
}
// La ruta /api/admin no tiene check de auth
Código Seguro
// BIEN: enforce en el servidor, refleja en la UI
// API route:
export async function GET() {
  const user = await getAuthenticatedUser();
  if (user.role !== 'admin') {
    return Response.json({ error: 'Prohibido' }, { status: 403 });
  }
  return Response.json(await getAdminData());
}

Ejemplo Real

Un vibecoder construyó un SaaS donde el botón 'eliminar todos los usuarios' estaba oculto para no-admins. Un usuario curioso abrió la pestaña Network, copió el fetch() al endpoint /api/admin/users y lo ejecutó en la consola. Todos los usuarios eliminados.

Cómo Prevenirlo

  • Cada API route sensible debe verificar el rol/permisos del usuario server-side, siempre
  • Trata todos los checks de auth del lado del cliente solo como UX — nunca como seguridad
  • Usa middleware o un helper de auth reutilizable para enforce roles en cada ruta protegida
  • Prueba tus API routes directamente con curl o Postman sin sesión válida

Tecnologías Afectadas

ReactNext.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas