IDOR (Insecure Direct Object Reference): Control de Acceso Deficiente

Publicado el por Admin

Insecure Direct Object Reference (IDOR)

La vulnerabilidad **Insecure Direct Object Reference (IDOR)**, o "Referencia Insegura a Objetos Directos", es un tipo de falla de control de acceso que ocurre cuando una aplicación web expone una referencia directa a un objeto interno de implementación (como un ID de base de datos, un nombre de archivo o una clave única) y no implementa un control de autorización adecuado. Esto permite a un atacante manipular estas referencias para acceder o modificar recursos a los que no debería tener permiso.


¿Cómo Funciona IDOR?

IDOR se produce cuando una aplicación confía demasiado en la entrada del usuario para identificar objetos y no realiza una verificación rigurosa para asegurarse de que el usuario que realiza la solicitud está autorizado para acceder a ese objeto específico. El atacante simplemente cambia un parámetro en la URL, en un formulario web o en una solicitud API para apuntar a un objeto diferente, y si no hay una verificación de autorización en el lado del servidor, la aplicación le otorgará acceso.

En esencia, la aplicación asume que si un usuario ha iniciado sesión, tiene derecho a ver cualquier objeto referenciado directamente por un parámetro. Esto ignora el principio de "privilegio mínimo" y "necesidad de conocer".


Escenarios Comunes de IDOR

Las vulnerabilidades IDOR pueden manifestarse en una variedad de situaciones:

1. Acceso a Datos de Otros Usuarios

El escenario más frecuente. Un usuario puede ver su propio perfil o documentos usando una URL como:

http://ejemplo.com/perfil?id=123

Si el atacante simplemente cambia el `id` a `124`, y la aplicación no verifica si el usuario actual (`id=123`) tiene permiso para ver el perfil `id=124`, el atacante podrá ver el perfil de otro usuario.

Esto aplica a documentos, mensajes, pedidos, historial de transacciones, etc.

2. Manipulación de Datos

Similar al acceso, pero con la capacidad de modificar o eliminar. Por ejemplo, en una API para actualizar pedidos:

PUT /api/pedidos/456
{
    "estado": "entregado"
}

Si la aplicación permite a un usuario autenticado cambiar el `id` del pedido de `456` a `457` sin verificar la propiedad, podría manipular el estado del pedido de otra persona.

3. Acceso a Archivos o Recursos del Sistema

Una aplicación puede servir archivos basados en un parámetro de nombre de archivo:

http://ejemplo.com/descargar?archivo=factura_cliente_123.pdf

Si un atacante puede adivinar o iterar nombres de archivo (por ejemplo, `archivo=config.ini` o `archivo=../conf/app.conf`), podría descargar archivos sensibles del servidor.

4. Escalada de Privilegios

Aunque no es una escalada de privilegios directa por sí misma, un IDOR puede conducir a ella. Si un usuario normal puede manipular un parámetro que indica su rol (por ejemplo, de `rol=usuario` a `rol=admin`) al actualizar su propio perfil, o puede acceder a una función administrativa cambiando un ID.


Impacto de IDOR

El impacto de una vulnerabilidad IDOR puede ser muy grave, dependiendo del tipo de objeto al que se accede o manipula. Las consecuencias incluyen:


Prevención de IDOR

La prevención de IDOR se centra principalmente en la implementación de controles de acceso robustos y la validación de la autorización en cada solicitud que acceda a recursos:

  1. **Verificación de Autorización en el Servidor (Siempre):**

    Este es el pilar fundamental. Antes de permitir que un usuario acceda o modifique un objeto, el código del servidor DEBE verificar si el usuario autenticado tiene los permisos necesarios para interactuar con ESE objeto en particular. Esto se debe hacer para cada solicitud que involucre objetos referenciados por la entrada del usuario.

    // Pseudocódigo para una verificación
    function get_user_profile(requested_id, current_user_id) {
        if (requested_id == current_user_id || current_user_is_admin) {
            // Permitir acceso
        } else {
            // Denegar acceso (ej. error 403 Forbidden)
        }
    }
  2. **Uso de Referencias Indirectas a Objetos (GUIDs/UUIDs o Hashing):**

    En lugar de exponer IDs secuenciales o predecibles en URLs o APIs, utiliza identificadores que no puedan ser adivinados o enumerados fácilmente. Los GUIDs (Globally Unique Identifiers) o UUIDs (Universally Unique Identifiers) son cadenas largas y aleatorias que son difíciles de predecir. También se pueden usar IDs basados en hashing o mapeos internos.

    http://ejemplo.com/perfil?id=a1b2c3d4-e5f6-7890-1234-567890abcdef
  3. **Validación de Entrada de Alta Calidad:**

    Aunque la autorización es clave, la validación de la entrada es una capa adicional. Asegúrate de que los IDs o referencias recibidas tienen el formato esperado (ej. solo números, UUIDs válidos, etc.).

  4. **Auditoría y Pruebas Continuas:**

    Realizar pruebas de penetración y auditorías de seguridad regularmente para identificar y corregir posibles vulnerabilidades IDOR. Esto incluye el testeo de casos límite y la iteración de IDs.


Consideraciones Éticas

La información sobre IDOR se comparte con fines educativos para mejorar la seguridad en el desarrollo de aplicaciones. La explotación de esta vulnerabilidad en sistemas ajenos sin el permiso expreso del propietario es ilegal y puede tener consecuencias severas. Siempre actúa de forma ética y responsable, utilizando este conocimiento en entornos de prueba controlados y con autorización.

¿Has encontrado alguna vez una vulnerabilidad IDOR o tienes consejos adicionales para prevenirlas? ¡Comparte tu experiencia con nuestra comunidad!

Este artículo es una introducción a IDOR. La implementación de controles de acceso seguros puede ser compleja y requiere una comprensión profunda de la lógica de negocio y las relaciones de datos de la aplicación.