Reports

IDOR y BOLA: qué son, cómo se encuentran y cómo se evitan

Guía en castellano sobre IDOR (BOLA en APIs): qué es, dónde suele aparecer, cómo se busca en bug bounty y cómo se corrige.

Qué es

Un IDOR (Insecure Direct Object Reference) aparece cuando una aplicación te da acceso a un recurso solo porque conoces su identificador. La aplicación comprueba que has iniciado sesión, pero no comprueba que ese pedido, esa factura o ese mensaje sean tuyos. En las APIs se le llama BOLA (Broken Object Level Authorization) y encabeza desde hace años la lista OWASP API Security Top 10.

La idea cabe en una línea: si cambias el número de la petición y recibes los datos de otra persona, hay un IDOR.

- GET /api/facturas/10432 HTTP/1.1
+ GET /api/facturas/10433 HTTP/1.1

Dónde suele aparecer

  • Identificadores en la URL (/pedido/123), en el cuerpo JSON ("user_id": 123) o en parámetros ocultos de formularios.
  • Acciones de escritura, no solo de lectura: borrar, editar o compartir un recurso ajeno suele ser más grave que verlo.
  • Funciones secundarias que se programan con menos cuidado: exportar a PDF, descargar adjuntos, invitaciones, notificaciones o versiones antiguas de la API.
  • Aplicaciones móviles, cuyos endpoints a menudo no se revisan tanto como los de la web.

Usar identificadores largos y aleatorios (UUID) no lo arregla: solo lo hace más difícil de explotar. Si el identificador aparece en otra respuesta, en un enlace compartido o en un correo, el fallo sigue ahí.

Cómo se busca

  1. Crea dos cuentas propias (A y B) en el programa. Nunca pruebes con datos de usuarios reales.
  2. Recorre la aplicación con la cuenta A y anota todas las peticiones que incluyan un identificador.
  3. Repite esas peticiones con la sesión de B, sin cambiar el identificador de A.
  4. Fíjate también en los métodos: a veces GET está protegido y PUT o DELETE sobre el mismo recurso no.
  5. Prueba a añadir identificadores donde no los hay: algunos endpoints aceptan un user_id que la aplicación no envía pero el servidor sí lee.

Cómo se evita

  • Comprobar la autorización en el servidor, en cada petición y para cada objeto: "¿este recurso pertenece a quien lo pide, o tiene permiso sobre él?".
  • Centralizar esa comprobación (por ejemplo, filtrando siempre las consultas por el propietario) en lugar de repetirla a mano en cada endpoint.
  • Añadir pruebas automáticas con dos usuarios que intenten acceder a recursos del otro.

Al reportarlo

Demuestra el acceso usando solo tus dos cuentas y explica qué datos o acciones quedan expuestos. El impacto depende de qué se puede leer o modificar, no de que el identificador sea fácil de adivinar.

Casos reales de IDOR / BOLA

Ver los 9 →
MEDIA#3689633

Discourse: un editor de etiquetas podía modificar etiquetas ocultas usando su ID en las rutas de sinónimos

Los endpoints de sinónimos y de ajustes de etiquetas de Discourse solo comprobaban permisos sobre la etiqueta visible, así que un editor sin acceso podía convertir etiquetas ocultas en sinónimos indicando su ID numérico.

[IDOR / BOLA]discourse12 visitas
28 sep 2026
2 min
MEDIA#3893632

Secure Custom Fields: fuga sin autenticación de títulos e IDs de entradas en borrador, privadas o pendientes

Los manejadores AJAX públicos de los campos post_object, relationship y page_link de Secure Custom Fields 6.9.2 consultaban entradas con post_status "any", y cualquier visitante anónimo podía listar y buscar contenido no publicado.

[IDOR / BOLA]wordpress
28 sep 2026
3 min
ALTA#3869124

Weblate: IDOR sin autenticación permitía modificar los datos de facturación asociados a un pago

La página de edición de pagos de Weblate no comprobaba ni la sesión ni los permisos: bastaba con conocer el UUID de un pago para cambiar el nombre y la dirección de facturación del cliente.

[IDOR / BOLA]weblate
27 sep 2026
2 min
MEDIA#3599383

Nextcloud Deck: la API de configuración acepta preferencias de tableros ajenos sin comprobar permisos

El endpoint de configuración de Deck guardaba claves del tipo board:<id>:<clave> para cualquier ID de tablero, sin verificar que el usuario tuviera acceso a ese tablero.

[IDOR / BOLA]nextcloud10 visitas
27 sep 2026
2 min
MEDIA#3674940

Nextcloud Team Folders: un administrador delegado "solo API" podía darse acceso a cualquier carpeta de equipo

El endpoint que añade grupos a una Team Folder no comprobaba si el administrador delegado podía gestionar esa carpeta concreta. Con IDs secuenciales, se podía asignar un grupo propio a todas las carpetas de la instancia.

[IDOR / BOLA]nextcloud
26 sep 2026
4 min
MEDIA#3506873

Nextcloud Photos: los álbumes inteligentes compartidos buscaban con las carpetas de origen del visitante, no del dueño

Al abrir un álbum inteligente ajeno, Photos filtraba los ficheros del propietario con la configuración photosSourceFolders del usuario que lo visitaba, lo que podía exponer ficheros de carpetas que el dueño no había elegido.

[IDOR / BOLA]nextcloud
26 sep 2026
5 min