IDOR / BOLA
Una referencia directa insegura a objetos (IDOR, o BOLA en APIs) aparece cuando la aplicación entrega o modifica un recurso solo porque le pasas su identificador, sin comprobar que sea tuyo. Basta con cambiar un número en la URL o en el cuerpo de la petición para leer facturas, mensajes o perfiles ajenos. Es de los fallos más reportados en bug bounty porque es fácil de pasar por alto y fácil de probar.
Guía: IDOR / BOLA, qué es y cómo se busca →HackerOne: el GraphQL sin autenticación revelaba el alcance de programas privados con IDs enumerables
Consultando sin sesión el nodo PolicyPageAssetGroup del GraphQL de HackerOne con IDs enumerables se obtenían los grupos de activos de programas privados y, según el investigador, títulos de reportes privados.
2 min
Fuga masiva de datos de aspirantes de la Fuerza Aérea de EE. UU. por un control de acceso roto en un Salesforce del DoD
Cualquier usuario autorregistrado en un portal Salesforce del Departamento de Defensa podía listar objetos Document y descargar, adivinando IDs, chats de reclutamiento con datos médicos, penales y de contacto de aspirantes a la Fuerza Aérea.
3 min
IDOR en Revive Adserver: un manager podía borrar los banners de otros managers desde banner-delete.php
El endpoint banner-delete.php de Revive Adserver comprobaba el acceso al cliente y a la campaña, pero no que el banner perteneciera a esa campaña. Cualquier manager podía borrar banners de otras agencias cambiando el parámetro bannerid.
3 min
Basecamp: secuestro de webhooks de otras cuentas con PUT y DELETE en proyectos All-access
La API de Basecamp comprobaba la visibilidad del proyecto y no la pertenencia a la cuenta: cualquier usuario podía redirigir o borrar webhooks de proyectos All-access ajenos y recibir en su servidor lo que se publicaba en ellos.
5 min
IDOR en VRoid Hub (pixiv): dar "me gusta" a un comentario oculto devolvía su texto y su autor
El endpoint de VRoid Hub para dar "me gusta" a comentarios aceptaba el ID de comentarios ocultos y devolvía en la respuesta su contenido y su autor, aunque el dueño de la publicación hubiese desactivado los comentarios.
3 min
Basecamp (Fizzy): los adjuntos privados de las tarjetas se podían abrir sin sesión con su URL de Active Storage
En app.fizzy.do, los ficheros subidos a una tarjeta y sus vistas previas se servían por URLs de Active Storage que cualquiera podía abrir, sin sesión y sin permisos sobre la tarjeta.
3 min
Mozilla Pontoon: cualquier usuario podía fijar o desfijar comentarios ajenos en cualquier proyecto o idioma
Los endpoints /pin-comment/ y /unpin-comment/ de Pontoon solo exigían sesión iniciada: el botón se ocultaba en la interfaz, pero el servidor no comprobaba si el usuario era gestor del proyecto.
4 min
Fizzy (Basecamp): importar una cuenta permitía mostrar contenido de otra mediante referencias de ActionText
La importación de cuentas de Fizzy convertía identificadores GID del ZIP subido en referencias firmadas SGID sin comprobar que el registro perteneciera a la cuenta que importaba, lo que permitía mostrar datos de otro cliente.
4 min
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.
2 min
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.
3 min
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.
2 min
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.
2 min