Insecure Direct Object Reference (IDORs): Prueba de Concepto y Explicación

    Las Insecure Direct Object References (IDOR) son un tipo de vulnerabilidad de seguridad que se presenta cuando una aplicación web emplea identificadores internos (como números o nombres) para identificar y acceder a recursos, como archivos o datos, sin validar adecuadamente la autorización del usuario para acceder a ellos.

    Por ejemplo, si una aplicación web utiliza un identificador numérico para identificar un registro en una base de datos, un atacante puede intentar adivinar este identificador y acceder a los registros sin la debida autorización. Esto puede permitir a los atacantes acceder a información confidencial, modificar datos, crear cuentas de usuario no autorizadas y realizar otras acciones maliciosas.

    La vulnerabilidad IDOR puede surgir cuando una aplicación web no implementa controles de acceso adecuados para los recursos que gestiona. Por ejemplo, una aplicación puede validar el acceso mediante autenticación y autorización para los recursos que se muestran en la interfaz de usuario, pero no aplicar la misma validación para los recursos que se acceden directamente a través de una URL.

    Para explotar una vulnerabilidad IDOR, un atacante puede intentar modificar manualmente el identificador de un objeto en la URL o utilizar una herramienta automatizada para probar diferentes valores. Si el atacante encuentra un identificador que le permite acceder a un recurso que no debería estar disponible, entonces la vulnerabilidad IDOR se ha explotado con éxito.

    Por ejemplo, supongamos que un usuario 'A' tiene un pedido con el identificador numérico 123 y el usuario 'B' tiene un pedido con el identificador numérico 124. Si el atacante intenta acceder a través de la URL "https://example.com/orders/124", la aplicación web podría permitir el acceso a ese pedido sin validar si el usuario tiene permiso para acceder a él. De esta manera, el atacante podría acceder al pedido del usuario 'B' sin la debida autorización.

    Para prevenir la vulnerabilidad IDOR, es crucial validar adecuadamente la autorización del usuario para acceder a los recursos, tanto en la interfaz de usuario como en las solicitudes directas a través de URL. Además, se recomienda restringir los permisos de acceso a los recursos y mantener actualizado el software y los sistemas operativos.


    Veamos un ejemplo:

  http://ejemplo.com/pagina?documento=12345

    En este caso, el valor del parámetro "documento" se utiliza como índice en una tabla de documentos en la base de datos. La aplicación toma el valor de este parámetro y lo utiliza en una consulta a la base de datos. Luego, la aplicación devuelve la información de la factura al usuario. 

    Dado que el valor de "documento" entra directamente en la consulta, al modificar el valor del parámetro es posible recuperar cualquier docuemnto, independientemente del usuario al que pertenezca la factura.


PoC


    Para la prueba de concepto utilizaremos el laboratorio de Skf-labs IDOR.

    La aplicación permite al usuario crear un archivo PDF y recuperar el archivo con el identificador que se le asigna:


    Intentamos acceder aleatoriamente con el identificador 4000 para forzar que nos de un documento y nos indica que solo hay identificadores del 1-1500.


    Para explotar e intentar acceder a otros documentos indexados, usaremos burpsuite que nos ayudaría a automatizar la tarea de borrar. Aunque mas adelante veremos con hacerlo con Wfuzz.

    Preparamos el ataque con numero del 1 al 1500 y vamos viendo la longitud de respuesta.


    Entonces, a partir de los resultados de la prueba de fuzzing, si observamos de cerca, el ID de índice "1612" parece interesante, ya que los otros ID parecen tener la misma longitud de respuesta. Vamos a verificar qué logramos con ID=356.


    Hemos podido acceder al documento perteneciente a algún otro usuario eludiendo los controles de acceso de la aplicación.


    De la misma manera lo podemos hacer mediante Wfuzz inficando con FUZZ donde queremos que haga fuzzing.


    Eliminamos los chars que se repiten hasta que nos salga el resultado esperado.


    Y como vemos nos arroja 3 documentos creados previamente por usuarios, incluido el que he creado yo, el 356.

No hay comentarios:

Publicar un comentario