¿Qué tan peligrosas son las referencias directas a las claves de la base de datos?

8

Una OWASP note sugiere que las referencias de objetos directos se consideran inseguras en algunos contextos. Definieron la "referencia directa de objetos" de la siguiente manera:

  

"Una referencia directa a un objeto se produce cuando un desarrollador expone una referencia a un objeto de implementación interna, como un archivo, directorio, registro de la base de datos o clave, como una URL o parámetro de formulario".

Alguien sugiere una solución a este problema:

  

Un mapa de referencia de objetos se llena primero con una lista de valores autorizados que se almacenan temporalmente en la sesión. Cuando el usuario solicita un campo (por ejemplo, color = 654321), la aplicación realiza una búsqueda en este mapa desde la sesión para determinar el nombre de columna apropiado. Si el valor no existe en este mapa limitado, el usuario no está autorizado. Los mapas de referencia no deben ser globales (es decir, incluir todos los valores posibles), son mapas / diccionarios temporales que solo se rellenan con valores autorizados.

Sin embargo, otra persona argumenta en el Wiki que los DOR son realmente inseguros solo para archivos, directorios. Esa persona agrega:

  

No hay forma de prácticamente DOR todas las claves primarias de la base de datos en una empresa real o un sistema posterior a la empresa.

Mi pregunta es, ¿cuán inseguras son las referencias directas de objetos a las claves primarias de la base de datos? ¿Puedes dar ejemplos concretos de vulnerabilidades? ¿Con qué frecuencia las personas hacen esfuerzos extraordinarios (como lo sugiere la primera persona) para enmascarar TODAS las claves de la base de datos?

    
pregunta user2398029 31.03.2013 - 23:06
fuente

2 respuestas

10

El problema no es tanto la referencia directa de objetos como la insegura referencias directas de objetos. Por ejemplo, supongamos que tiene un script que muestra un mensaje privado, y ese script toma una identificación como parámetro. Si ve la lista para su usuario, verá enlaces a los mensajes a los que tiene acceso. Pero si puede cambiar esa ID en el parámetro y usarla para ver otros mensajes arbitrarios, eso constituye una referencia de objeto directa insegura.

Algunas personas sienten que es más seguro crear un mecanismo que mapee las ID específicas de los usuarios a través de los objetos, ya que inherentemente requiere que consideres el control de acceso.

No se requiere exactamente ocultar las claves de la base de datos, pero dificulta la vida si un atacante intenta hacer referencia a las ID internas en un ataque. Las referencias directas a nombres de archivos y otros identificadores internos de este tipo pueden permitir a los atacantes mapear la estructura interna del servidor, lo que podría ser útil en otros ataques. Esto también invita a problemas de inyección de ruta y recorrido de directorios.

    
respondido por el Polynomial 31.03.2013 - 23:13
fuente
3

Hay muchos factores de los que preocuparse al exponer las ID al público. Creo que lo más importante es evitar los rastreadores. Si sé que /page.php?id=1 mostrará información relativa a un registro en la base de datos, entonces /page.php?id=2 debe mostrar información del siguiente registro en orden, y /page.php?id=3 es el siguiente y así sucesivamente, para que pueda leer toda la información en la mesa, potencialmente obteniendo acceso a cosas que no debía, como, por ejemplo, publicar en una sección protegida por contraseña en un foro.

Pero si la ID está realmente encriptada usando un código desconocido para mí, ya no puedo rastrear tan fácilmente los registros de la base de datos, tendré que obtener las ID de las páginas a las que tengo acceso y, como resultado, solo tendré acceso a la información que se supone que debo.

Tengo un caso en el que deberías poder ver el perfil de un personaje del juego, pero se supone que no debes llegar a esta página por tu cuenta. Solo debe verlo si el propietario del personaje le proporciona la URL. Esta URL lleva una frase encriptada, que contiene la ID encriptada, los controles CRC para evitar la fuerza bruta e incluso una fecha de caducidad por sí misma.

    
respondido por el Havenard 01.04.2013 - 09:00
fuente

Lea otras preguntas en las etiquetas