Tema 9

9. Broken Object Level Authorization (BOLA) y Broken Function Level Authorization (BFLA)

Pocas fallas son tan frecuentes y tan dañinas en APIs como la autorización rota a nivel de objeto y de función. BOLA y BFLA no requieren técnicas sofisticadas: suelen aparecer cuando la API autentica bien, pero decide mal quién puede acceder a qué recurso o ejecutar qué operación. Por eso son dos de los riesgos más graves y persistentes en APIs REST.

Objetivo Entender y prevenir las fallas de autorización más críticas
Enfoque Casos reales, causas raíz y patrones de defensa
Resultado Distinguir y detectar BOLA y BFLA en diseño y pruebas

9.1 Introducción

Cuando una API sufre una brecha grave, con frecuencia el problema no está en criptografía, ni en una librería, ni en una inyección exótica. Está en que un actor autenticado pudo hacer algo que nunca debió permitírsele. Ese es el terreno de las autorizaciones rotas.

Dentro de ese terreno, BOLA y BFLA ocupan un lugar central:

  • BOLA se enfoca en acceso indebido a objetos concretos.
  • BFLA se enfoca en acceso indebido a funciones o acciones.

Ambas pueden coexistir en la misma API y ambas suelen pasar desapercibidas porque, desde el punto de vista técnico, la solicitud puede parecer perfectamente válida.

9.2 Qué es BOLA

Broken Object Level Authorization ocurre cuando la API no verifica correctamente si la identidad autenticada tiene permiso para acceder a un objeto específico. En otras palabras, el endpoint existe, el usuario está autenticado, pero el recurso consultado, modificado o eliminado no le pertenece o no debería estar a su alcance.

Ejemplos típicos:

  • Consultar `/pedidos/1542` y obtener un pedido de otro cliente.
  • Editar `/usuarios/88` aunque el token corresponda a otro usuario.
  • Descargar un archivo ajeno cambiando un identificador en la URL.
  • Acceder a registros de otro tenant mediante filtros manipulados.
El corazón de BOLA no es que el ID sea fácil de adivinar. Es que el backend no valida correctamente si ese objeto concreto está autorizado para ese actor.

9.3 Qué es BFLA

Broken Function Level Authorization ocurre cuando la API permite a un actor ejecutar una función que no corresponde a su rol, contexto o nivel de privilegio. Aquí el problema no es tanto el objeto, sino la capacidad expuesta por la ruta o acción.

Ejemplos comunes:

  • Un usuario común accede a `/admin/reportes/exportar`.
  • Un cliente final activa una función reservada a soporte.
  • Una aplicación externa consume un endpoint interno de administración.
  • Un operador sin permiso desactiva cuentas o cambia estados críticos.

En BFLA, la API permite llegar a una función que debería estar bloqueada para ese actor, aunque el endpoint y la autenticación sean válidos en sentido técnico.

9.4 Diferencia entre BOLA y BFLA

Ambas son fallas de autorización, pero atacan niveles distintos de decisión.

Tipo Pregunta que falla Ejemplo típico
BOLA ¿Puede este actor acceder a este objeto concreto? Leer el pedido de otro usuario cambiando el ID
BFLA ¿Puede este actor ejecutar esta función o acción? Acceder a un endpoint administrativo sin privilegio suficiente

En la práctica, una misma operación puede involucrar ambas capas. Por ejemplo, un endpoint administrativo que además opera sobre objetos de otros usuarios puede sufrir BFLA y BOLA al mismo tiempo.

9.5 Por qué BOLA es tan frecuente en APIs

Las APIs suelen exponer recursos identificados por IDs, UUIDs, claves de negocio o relaciones navegables. Eso hace natural que el cliente indique sobre qué objeto quiere operar. Si el backend no recalcula y valida el ownership real, aparece la brecha.

BOLA es frecuente porque muchas implementaciones hacen algo parecido a esto:

  • Reciben un identificador desde la URL o el body.
  • Buscan el objeto.
  • Devuelven o modifican el resultado.

Lo que falta en el medio es la pregunta decisiva: “¿este actor tiene permiso sobre este objeto?”

9.6 Por qué BFLA es tan frecuente en APIs

BFLA suele aparecer cuando la API crece rápido, incorpora roles nuevos, mantiene endpoints heredados o confía demasiado en que el frontend ocultará funciones sensibles. También aparece cuando se reutilizan controladores o rutas sin revisar si todos los consumidores deberían tener acceso.

Ejemplos de causas típicas:

  • Endpoints administrativos protegidos solo “por convención”.
  • Rutas internas expuestas accidentalmente a clientes externos.
  • Acciones sensibles protegidas en UI, pero no en backend.
  • Reglas inconsistentes entre versiones de la API.

9.7 El mito del ID impredecible

Un error común es pensar que usar UUIDs o identificadores largos elimina el riesgo de BOLA. Eso puede dificultar la enumeración simple, pero no corrige el problema real. Si un atacante obtiene o deduce un ID válido por cualquier medio, la API sigue necesitando verificar si ese recurso le corresponde.

El control correcto no es ocultar identificadores. Es autorizar correctamente el objeto cada vez que se lo usa.

UUID ayuda contra adivinación trivial. No reemplaza autorización por objeto.

9.8 Cómo se explota BOLA en la práctica

La explotación de BOLA suele ser simple y altamente efectiva. Un atacante autenticado modifica un identificador en la URL, el body o un parámetro y observa si obtiene datos distintos, puede editar registros ajenos o descargar recursos que no le pertenecen.

Señales típicas de explotación:

  • Secuencias de acceso a IDs consecutivos o relacionados.
  • Múltiples solicitudes con el mismo token hacia objetos distintos.
  • Diferencias informativas entre `403`, `404` y `200`.
  • Descargas repetidas de recursos fuera del patrón normal del usuario.

9.9 Cómo se explota BFLA en la práctica

La explotación de BFLA suele comenzar con reconocimiento: documentación, tráfico capturado, endpoints ocultos en frontend, convenciones de nombres o versiones antiguas. El atacante prueba funciones que sospecha sensibles y observa si el backend las bloquea realmente o no.

Indicadores típicos:

  • Pruebas sobre rutas como `/admin`, `/internal`, `/support`, `/management`.
  • Cambio de método HTTP sobre una misma ruta para explorar acciones.
  • Consumo de funciones visibles solo para ciertos perfiles del frontend.
  • Reuso de tokens de bajo privilegio contra acciones elevadas.

9.10 Impacto de BOLA

El impacto de BOLA suele ser inmediato sobre confidencialidad e integridad. Permite acceso horizontal entre usuarios, cuentas o tenants, y a veces incluso modificación o eliminación de datos ajenos.

Consecuencias comunes:

  • Fuga de información personal o sensible.
  • Manipulación de pedidos, perfiles, pagos o archivos.
  • Violación de separación entre clientes o tenants.
  • Fraude mediante alteración de estados o propiedad.

9.11 Impacto de BFLA

BFLA puede afectar tanto integridad como operación general del sistema. El actor obtiene acceso a funciones que no forman parte de su perfil y puede alterar datos críticos, ejecutar acciones administrativas o activar procesos internos.

Consecuencias frecuentes:

  • Escalación horizontal o vertical de privilegios.
  • Acceso a reportes, exportaciones o funciones internas.
  • Desactivación de cuentas, cambios de estado o aprobaciones indebidas.
  • Mayor superficie para fraude y sabotaje operativo.

9.12 Causas raíz más comunes

Aunque BOLA y BFLA se manifiestan de manera distinta, sus causas raíz suelen repetirse:

  • Confundir autenticación con autorización.
  • Aplicar controles a nivel de endpoint, pero no a nivel de objeto.
  • Depender del frontend para ocultar funciones sensibles.
  • Confiar en identificadores enviados por el cliente.
  • Codificar reglas dispersas e inconsistentes entre servicios.
  • No contemplar tenant, ownership o contexto del negocio.

9.13 Prevención de BOLA

Prevenir BOLA exige validar acceso al objeto real en backend, en cada operación relevante. No basta con proteger el endpoint general.

Buenas prácticas clave:

  • Resolver el objeto dentro del contexto autorizado del actor.
  • Aplicar filtros por ownership o tenant desde la consulta misma cuando sea posible.
  • Verificar relación real entre identidad y recurso antes de leer, editar o borrar.
  • No confiar en que un ID “difícil” es defensa suficiente.
  • Probar activamente accesos cruzados entre usuarios y tenants.

9.14 Prevención de BFLA

Prevenir BFLA requiere asegurar que cada función sensible tenga una política explícita de acceso y que esa política se aplique en backend, sin depender de la interfaz.

Recomendaciones:

  • Separar claramente rutas públicas, de cliente, de soporte y administrativas.
  • Aplicar permisos o políticas por acción, no solo por módulo.
  • Revisar endpoints heredados, internos y experimentales.
  • No asumir que ocultar un botón equivale a proteger la operación.
  • Validar roles, scopes y contexto real antes de ejecutar funciones críticas.

9.15 Casos mixtos: cuando falla más de una capa

En incidentes reales es frecuente que varias fallas convivan. Por ejemplo:

  • Un usuario accede a una función de soporte que no le corresponde.
  • Dentro de esa función, además, puede operar sobre objetos de otros clientes.

Ese caso combina BFLA con BOLA. Por eso es importante no analizar hallazgos en aislamiento. La API puede tener una cadena de decisiones de acceso defectuosa en más de un punto.

9.16 Cómo probar BOLA y BFLA

Las pruebas deben ser deliberadas y sistemáticas. No alcanza con verificar que un usuario legítimo acceda a sus propios datos. Hay que comprobar que no acceda a los ajenos y que no alcance funciones fuera de su perfil.

Casos mínimos de prueba:

  • Usuario A intentando acceder a objetos del usuario B.
  • Usuario de tenant A intentando consultar recursos de tenant B.
  • Perfil básico llamando a funciones de soporte o administración.
  • Cliente externo intentando usar rutas internas o heredadas.
  • Actor legítimo cambiando propiedades o acciones fuera de su alcance.

9.17 Señales en logs y monitoreo

Si la observabilidad está bien planteada, BOLA y BFLA pueden dejar señales detectables:

  • Un mismo token accediendo a muchos IDs no relacionados.
  • Repetición de errores `403` o `404` sobre recursos secuenciales.
  • Perfiles de bajo privilegio intentando funciones administrativas.
  • Accesos inesperados a rutas poco usadas o internas.
  • Operaciones transversales entre tenants o espacios de trabajo.

La detección no reemplaza la prevención, pero ayuda a reducir tiempo de exposición y a entender patrones de abuso.

9.18 Errores comunes de remediación

  • Ocultar el endpoint del frontend sin bloquearlo en backend.
  • Reemplazar IDs secuenciales por UUID y dar por resuelto el problema.
  • Agregar un chequeo parcial en un endpoint, pero no en rutas equivalentes.
  • Corregir el caso puntual sin crear una política reutilizable.
  • Basarse solo en rol general y no en objeto, tenant o propiedad.
Si la remediación no corrige la lógica de autorización, la falla suele reaparecer en otro endpoint con otro nombre.

9.19 Qué debes recordar de este tema

  • BOLA ocurre cuando la API autoriza mal el acceso a un objeto concreto.
  • BFLA ocurre cuando la API autoriza mal el acceso a una función o acción.
  • Ambas fallas suelen afectar actores ya autenticados, por eso son especialmente peligrosas.
  • El problema real no es el formato del ID ni la ocultación de rutas, sino la decisión incorrecta de acceso en backend.
  • Prevenirlas exige controles por endpoint, objeto, tenant, propiedad y contexto de negocio.

9.20 Conclusión

BOLA y BFLA representan dos de las fallas más críticas en APIs REST porque atacan el corazón de la seguridad de acceso: la decisión sobre qué puede hacer cada identidad autenticada. Son peligrosas precisamente porque no requieren romper la autenticación; basta con encontrar un camino mal autorizado. Diseñar, probar y monitorear estas decisiones con rigor es esencial para cualquier API expuesta.

En el próximo tema estudiaremos validación de entradas, sanitización y manejo seguro de parámetros, otro pilar central para evitar que la API procese datos maliciosos o ambiguos.