REFERENCIA DIRECTA INSEGURA A OBJETOS. DEFINICION: Una referencia directa a objetos ("direct object...

Post on 02-Feb-2016

220 views 0 download

Transcript of REFERENCIA DIRECTA INSEGURA A OBJETOS. DEFINICION: Una referencia directa a objetos ("direct object...

REFERENCIA DIRECTA INSEGURA A OBJETOS

DEFINICION:

Una referencia directa a objetos ("direct object reference") ocurre cuando un programador expone una referencia hacia un objeto interno de la aplicación, tales como un fichero, directorio, registro de base de datos, o una clave tal como una URL o un parámetro de formulario Web.

Un atacante podría manipular este tipo de referencias en la aplicación para acceder a otros objetos sin autorización, a menos que se aplique un control de accesos como medida de prevención.

ENTORNOS AFECTADOS:

Todos los entornos de desarrollo de aplicaciones de Web son vulnerables presentando referencias a objetos internos de la aplicación.

VULNERABILIDAD

Muchas aplicaciones presentan a los usuarios referencias a objetos internos. Un atacante podría manipular los parámetros de entrada a la aplicación cambiando estas referencias, saltándose de esta manera un control de accesos incorrectamente desarrollado

Con frecuencia, estas referencias apuntan a sistemas de ficheros y bases de datos, si bien cualquier otro elemento de la aplicación podría ser vulnerable por un problema de esta categoría.

EJEMPLO:

En el ejemplo que se presenta a continuación, un atacante puede cambiar el parámetro "cartID" para obtener la información asociada a cualquier "carrito de la compra" de la aplicación.

int cartID = Integer.parseInt( request.getParameter( "cartID" ) ); String query = "SELECT * FROM table WHERE cartID=" + cartID;

PROTECCION:

La mejor protección es evitar presentar al usuario cualquier referencia directa a un objeto, mediante el uso de un índice, un mapa de referencias indirectas, o cualquier otro método que sea fácil de verificar. Si es necesario utilizar una referencia directa, se deberá comprobar que el usuario está autorizado a usarla antes de hacerlo.

http://www.example.com/application?file=1

En caso de que sea necesario presentar referencias a elementos de base de datos, hay que asegurarse de que las sentencias SQL y otros mecanismos de acceso a base de datos sólo permiten que se obtengan los registros autorizados:

int cartID = Integer.parseInt( request.getParameter( "cartID" ) ); User user = (User)request.getSession().getAttribute( "user" ); String query = "SELECT * FROM table WHERE cartID=" + cartID + " AND userID=" + user.getID();

EJEMPLO DE UN ATAQUE