Endpoints Sin Autenticación
API routes que realizan operaciones sensibles — leer datos de usuarios, modificar registros, eliminar recursos — sin ninguna verificación de sesión o token.
Cómo Funciona
Sin un check de auth, cualquier request HTTP anónimo puede disparar tu endpoint. Los atacantes enumeran rutas leyendo tu bundle de JavaScript, revisando paths comunes o usando herramientas como ffuf. Una vez encontradas, las llaman libremente.
// MAL: devuelve datos de usuario sin verificar auth
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const userId = searchParams.get('userId');
const user = await db.users.findUnique({ where: { id: userId } });
return Response.json(user);
}// BIEN: verifica la sesión primero
export async function GET(req: Request) {
const supabase = createClient();
const { data: { user } } = await supabase.auth.getUser();
if (!user) return Response.json({ error: 'No autorizado' }, { status: 401 });
const profile = await db.users.findUnique({ where: { id: user.id } });
return Response.json(profile);
}Ejemplo Real
Las API routes generadas por IA rutinariamente se saltan los checks de auth porque los datos de entrenamiento contienen muchos ejemplos de rutas CRUD simples sin auth. El resultado son APIs en producción con endpoints de datos completamente abiertos.
Cómo Prevenirlo
- Agrega un check de auth como la primera línea de cada API route handler
- Crea un wrapper withAuth() reutilizable que devuelva 401 si no hay sesión válida
- Audita cada archivo en tu directorio /api — confirma que cada uno tiene un check de sesión
- Usa Data Hogo para escanear automáticamente todas tus API routes en busca de auth faltante
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
API Keys Hardcodeadas
criticalAPI keys, tokens o secretos escritos directo en el código fuente, visibles para cualquiera con acceso al repo — incluyendo repos públicos de GitHub.
Sin Validación de Inputs
mediumDatos enviados por el usuario pasados directo a bases de datos o APIs externas sin ninguna validación de tipo, formato o contenido.
Contraseñas en Texto Plano
criticalContraseñas de usuarios guardadas como strings crudos en la base de datos en lugar de hashearse con bcrypt o Argon2.
JWT Sin Expiración
highJWTs firmados sin el claim `exp` que nunca expiran, lo que significa que un token robado da acceso permanente sin forma de revocarlo.