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/ , 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.

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

Last updated