# IDOR (Insecure Direct Object Reference)

## ¿Qué es y cómo funciona?

IDOR (Insecure Direct Object Reference) es una vulnerabilidad de seguridad común en aplicaciones web que permite a un atacante acceder y manipular información confidencial al explotar la falta de autenticación o autorización adecuada en la referencia directa a objetos.

En términos simples, esta vulnerabilidad se produce cuando una aplicación web expone un identificador único (ID) de un objeto, como un usuario o una factura, a través de su interfaz de usuario o URL, y no valida adecuadamente la autorización antes de permitir que el usuario acceda a él. Como resultado, un atacante puede modificar el ID en la solicitud HTTP para acceder a información confidencial de otros usuarios o realizar acciones maliciosas en su nombre.

Por ejemplo, supongamos que una aplicación web tiene una URL para que un usuario vea sus facturas:

`https://example.com/view_invoice.php?id=12345`

El ID "12345" se refiere a la factura del usuario actual y se utiliza para recuperar y mostrar la información de la factura. Si un atacante cambia el ID a "12346" o cualquier otro número, la aplicación web podría mostrar la información de la factura de otro usuario sin requerir la autenticación o autorización adecuada.

Para mitigar este tipo de vulnerabilidades, se deben aplicar medidas de seguridad adecuadas, como la validación de permisos, la implementación de control de acceso basado en roles, la encriptación y la ocultación de los identificadores únicos.

### Encontrar IDORs

Primero hay que saber que te puedes encontrar el IDOR de 3 maneras:

* Hasheado
* Encoded
* Unpredicible

#### Hash

IDOR con hash es un tipo específico de Insecure Direct Object Reference (IDOR) que ocurre cuando los identificadores únicos de un objeto se basan en un valor hash generado a partir de un atributo del objeto, como su nombre de usuario o correo electrónico.

Por ejemplo, supongamos que una aplicación web utiliza el correo electrónico del usuario para generar un valor hash y luego lo utiliza como ID para acceder a sus datos en la base de datos:

`https://example.com/view_profile.php?id=14e1b600b1fd579f47433b88e8d85291`

En este caso, el valor hash "14e1b600b1fd579f47433b88e8d85291" se genera a partir del correo electrónico del usuario "<user@example.com>" y se utiliza como ID para acceder a su perfil. Si un atacante conoce el valor de hash generado a partir del correo electrónico de otro usuario, podría cambiar el valor "id" en la URL para acceder al perfil de ese usuario sin necesidad de autenticación o autorización adecuada.

#### Encoded

IDOR con encoded es un tipo específico de Insecure Direct Object Reference (IDOR) que ocurre cuando los identificadores únicos de un objeto están codificados o cifrados de alguna manera en la interfaz de usuario o en la URL, lo que puede permitir a un atacante manipularlos y acceder a información confidencial sin necesidad de autenticación o autorización adecuada.

Por ejemplo, supongamos que una aplicación web utiliza un valor codificado en Base64 como ID para acceder a los perfiles de usuario:

`https://example.com/view_profile.php?id=eyJpZCI6MTIzNDU2Nzg5MCwibmFtZSI6IkpvaG4gRG9lIiwibW9kaWZpZWQiOnRydWV9`

En este caso, el valor "eyJpZCI6MTIzNDU2Nzg5MCwibmFtZSI6IkpvaG4gRG9lIiwibW9kaWZpZWQiOnRydWV9" es una cadena codificada en Base64 que contiene información sobre el ID y otros atributos del objeto. Si un atacante decodifica la cadena y cambia el valor del ID, podría acceder a los perfiles de otros usuarios sin necesidad de autenticación o autorización adecuada.

Normalmente lo que haríamos aquí es coger el archivo encoded y hace un decode con páginas como [ https://www.base64decode.org/](< https://www.base64decode.org/>) , cambiaríamos el id y pondríamos el que queremos nosotros y haríamos un <https://www.base64encode.org>

#### Unpredictible

IDOR unpredictable (impredecible) es un tipo específico de Insecure Direct Object Reference (IDOR) que ocurre cuando los identificadores únicos de un objeto son impredecibles o difíciles de adivinar, pero aún se pueden explotar debido a la falta de autenticación o autorización adecuada.

Por ejemplo, supongamos que una aplicación web utiliza un ID de sesión generado aleatoriamente para acceder a los perfiles de usuario:

`https://example.com/view_profile.php?id=ABCDE12345`

En este caso, el valor "ABCDE12345" es un ID de sesión generado aleatoriamente que se utiliza para acceder a los perfiles de usuario. Si un atacante adivina el valor del ID de sesión de otro usuario, podría acceder a su perfil sin necesidad de autenticación o autorización adecuada.

La mejor manera de saber si estamos con un IDOR Unpredictible es creando 2 cuentas y cambiar los nombres de ID entre ellos, si puedo ver los IDs de otros usuarios mientras estoy logeado con otra cuenta, hemos encontrado un IDOR.

### Ejemplo

Una vez dentro de una cuenta que has creado tu, tendríamos que hacer 3 checks:

1. Ver si podemos ver por ejemplo \``example.com/customer?id=2`\` en la URL.
2. Hacerlo con el F12 --> Network --> Recargar la página --> F5 y ver si hay un por ejemplo un archivo con\``customer?id=2`\`, podríamos hacer un New Request cambiando la ID y ver si podemos ver otra info.

<figure><img src="/files/IeEZqPyObqE5mXsgJNay" alt=""><figcaption><p>Interceptamos el customer?id=15 para cambiarlo</p></figcaption></figure>

<figure><img src="/files/vMqqK54cV4hPUOE0Kvuw" alt=""><figcaption><p>Headers -->Resend</p></figcaption></figure>

<figure><img src="/files/daWxg3Kg0vd14EVyLKmn" alt=""><figcaption><p>Nrw Request --> Cambiamos de ID --> Send</p></figcaption></figure>

<figure><img src="/files/Sq5GsA9YaUa90lZyC7Bl" alt=""><figcaption><p>Información de otro usuario, IDOR detectado</p></figcaption></figure>

3. Si está o con base64 o hash y ver decodeandolo podemos ver la ID y cambiarlo y codear de nuevo a ver si funciona.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://j4ckie0x17.gitbook.io/notes-pentesting/pentesting-web/idor-insecure-direct-object-reference.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
