VULNERABILIDADES DE APLICACIONES WEB: REFERENCIA INSEGURA Y DIRECTA DE UN OBJETO

10.01.2018 07:57
Conocida en inglés como Insecure Direct Object Reference, esta vulnerabilidad fue muy común en algún momento y aún siendo menos usual hoy en día, todavía es posible encontrarla. Su taxonomía exacta es difícil de establecer porque tiene variaciones de acuerdo a quien la describe pero la defeniremos como aquella en la cual los mecanismos de autorización del sistema permiten que un usuario obtenga acceso a datos o registros de otro usuario al modificar el valor clave que identifica los suyos. Facilitaremos la comprensión con un ejemplo muy elemental:
 
https://entidad-financiera/estado-cuenta?cliente=79915
 
Como los mecanismos de autorización son permisivos, el cliente 79915 (número que se va asignando por orden de alta en la institución) podrá ver el estado de cuenta de cualquier otro cliente simplemente cambiando el número de cliente. Para el registrado inmediatamente antes que él, la consulta será:
 
https://entidad-financiera/estado-cuenta?cliente=79914
 
En otro caso la cosulta podrá ser 
 
https://mutual/cuentas/ver/147725
 
y un atacante intentaría algo como:
 
https://mutual/cuentas/actualizar/147725
 
El segundo ejemplo podría ser más peligroso que el primero, podría permitir algo más que simplemente ver los datos. 
 
Para prevenir este tipo de ataques implemente de un control de acceso. El usuario tiene que estar autorizado para ver su información y sólo la suya. Como medida adicional asegúrese de que la clave que se utiliza en la búsqueda de un registro no sea controlable externamente por el usuario. Además esa clave debería ser aleatoria, no un nombre o un número entero. Si se opta por una clave no aleatoria la misma al menos debería ser encriptada para dificultar la obtención de otros valores válidos, aunque esto último es menos seguro que la clave aletoria. Incluso las claves "aleatorias" suelen tener una entropía tan baja que en determinados casos pueden ser descubiertas con relativa facilidad.