Hackear endpoints de API con IDOR

Hackear endpoints de API con IDOR – Codelivly

Hola gente !

Estoy escribiendo sobre un IDOR que identifiqué hace unos días. Veamos primero qué es IDOR.

Las referencias directas a objetos inseguras (IDOR) son un tipo de vulnerabilidad de control de acceso que se produce cuando una aplicación utiliza la entrada proporcionada por el usuario para acceder directamente a los objetos. El término IDOR se popularizó por su aparición en el OWASP Top Ten de 2007. Sin embargo, este es solo un ejemplo de los muchos errores de implementación de control de acceso que pueden conducir a eludir los controles de acceso. Las vulnerabilidades de IDOR se asocian más comúnmente con la elevación horizontal de privilegios, pero también pueden ocurrir en relación con la elevación vertical de privilegios.

Ahora vamos con las hazañas. Piense en las aplicaciones como una plataforma de suscripción y facturación. La aplicación tiene una función para agregar diferentes roles de usuario para administrar la organización creada mediante el envío de invitaciones a su dirección de correo electrónico.

Se envía un correo electrónico de confirmación con un enlace de registro al nuevo usuario cuando un administrador solicita agregar un nuevo usuario.

La lista de usuarios invitados aparece como "invitaciones pendientes" en un punto final hasta que los usuarios aceptan las invitaciones.

Bueno, el administrador también tiene una función para cancelar las invitaciones que se han enviado a los nuevos usuarios esperados. Estaba tratando de verificar el enlace de la invitación para ver si aún es válido incluso después de que se canceló la invitación. Comencé a eructar e intercepté la solicitud de cancelación.

La aplicación genera una solicitud en el método DELETE al servidor con un punto final de API. De todos modos, eché un vistazo más de cerca al punto final: "/snappy/api/pending_invites/sats3yhb4xt6”, El punto final contiene un identificador. Marqué este como el ID de invitación.

Decidí probar un IDOR aquí. Invité a otro usuario de otra cuenta. Agarré el ID de invitación de esa otra cuenta y lo pegué aquí. Y funcionó ! Una respuesta exitosa de IDOR mostró el correo electrónico del usuario.

Respuesta de muestra

Pero surgió una nueva pregunta, ¿cómo puedo recopilar ID de invitación de otros usuarios sin acceder a sus cuentas de administrador? Sin mejores hazañas, no puedo informar esto.

Volví a mirar el ID de la invitación e intenté identificar si había algún algoritmo de encriptación. ¡Pero sin resultados! Fui al repetidor y reenvío la solicitud anterior que había enviado unos minutos antes.

Ejemplo de respuesta

¡Y esta vez obtuve una respuesta diferente! "No se pudo encontrar UserInvite con 'id'=3724993831954625322”. Esto significa que la identificación digital 3724993831954625322 está conectado a la ID de invitación (sats3yhb4xt6), o uno de ellos está encriptado, ¡lo cual era impredecible para mí!

Así que decidí profundizar. Reemplacé un carácter aleatorio con la identificación de la cadena en el punto final (/snappy/api/pendientes_invitaciones/b). ¡Y la respuesta que recibí fue bastante interesante!

El parámetro 'id' y su valor = 10! Cambié el valor de la cadena a "b", y esta vez encontré un valor diferente en el "identificador" configuración !

Esto significa que la identificación del canal posiblemente sea generada por una identificación numérica.

De todos modos, si la aplicación me muestra una identificación digital dedicada con un mensaje "No se pudo encontrar UserInvite con 'id'=numeric_id", significa que la aplicación acepta mi solicitud e intenta eliminar una invitación pendiente, ¡pero no pudo encontrar la identificación! Porque tal vez esta invitación ya se haya cancelado o aceptado y la identificación de la cadena haya expirado, pero la identificación numérica todavía está conectada a el ID de la cadena ¿Qué pasa si doy una cadena o un carácter aleatorio que podría ser válido?

En intruso, decidí fuzzear el punto final con un valor de cadena aleatorio. ¡Y me cancelaron un montón de invitaciones pendientes!

Conclusión: El punto final de la API solo validó la solicitud. Simplemente estaba eliminando invitaciones pendientes cada vez que llegaba una solicitud al servidor con esa identificación de canal. Solo era cuestión de verificar el ID de la invitación y, si era válido, eliminar la invitación. La aplicación no validó la solicitud, sin importar de dónde proviniera o qué usuario la hiciera.

Gracias a todos; encuéntrame en twitter. Muhammad Julfikar Hyder

Si quieres conocer otros artículos parecidos a Hackear endpoints de API con IDOR puedes visitar la categoría Tutoriales.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas