Tengo entendido que un buen diseño de seguridad no revela información sobre los datos a los que el usuario no puede acceder. Esto incluye información sobre la existencia de dichos datos, es decir, si un usuario no tiene permiso para acceder a entidades de cierto tipo, tampoco debería poder averiguar si existe una entidad de ese tipo con un ID determinado.
Un proyecto en el que estoy trabajando actualmente no lo admite de manera constante. Por ejemplo, una solicitud a /edit/record/52
devolverá un error HTTP 404 si el registro con ID 52 no existe y un error HTTP 403 si existe.
No estoy seguro de qué problema hay en términos de seguridad. Solo con esta información, los atacantes probablemente no pueden hacer nada. Mi preocupación es que esto permite a los atacantes agregar información sobre los datos en el sistema (ya que tenemos varios puntos finales para diferentes entidades que muestran este mismo comportamiento) que luego podrían usarse para atacar el sistema. Es cierto que no tengo un escenario de ataque usando esta información presentada en mi cabeza, pero me temo que esta fuga podría al menos facilitar los ataques. Desafortunadamente, cambiar esto requeriría un poco de refactorización de nuestra arquitectura de seguridad, por lo que no lo hicimos de inmediato.
¿Es este un vector de ataque común? ¿Debería preocuparme y arreglar esto siempre que sea posible? ¿O es aceptable la filtración de información sobre la existencia de objetos? ¿Podría proporcionar ejemplos de ataques conocidos o de alto perfil en los que la filtración de datos aparentemente insignificantes conduzca al compromiso de un sistema?