RSS

OWASP Top Ten: A4 – Referencia directa insegura a objetos

16 Ene

Esta vulnerabilidad, esta relacionada con la referencia a objetos, la cual, permite al atacante realizar referencia a objetos para los que no tiene autorización.

La primera vez que hablé sobre está vulnerabilidad con alguien me soltó una frase similar a la primera de este post, y por su cara la mía debía de ser un poema (y mira que jugar al poquer no se me da mal). En ese momento yo pensaba: o no tiene ni idea y se ha aprendido la definición del tirón o si que sabe y solo se ha quedado en silencio al ver mi cara. Afortunadamente, tras unos segundos paso la conmoción y resulto ser que, él si que tenía idea, y yo, aunque no sabía el nombre, si sabía a que tipo de fallos se refería. Realmente a lo largo de la vida, y más en esto de la tecnología, esto os va a pasar muchas veces. Habrá cosas que os nombrarán, y gente se sabrá solo las definiciones, pero nunca tengáis miedo a preguntar, porque o descubrirás que si lo sabes, o que ninguno de los dos tiene ni idea, o aprenderás algo nuevo ese día.

Ya me he ido bastante por las ramas, así que volvamos a lo que nos ocupa. ¿Realmente que es esta vulnerabilidad?

Empecemos por describir a que llamamos objetos (en este caso concreto) y que es una referencia directa a ellos. En este caso, consideraremos objetos a los elementos internos de la aplicación, es decir, ficheros, directorios y registros de bases de datos que utiliza nuestra aplicación para almacenar información, y que son referenciados a través de parámetros en url’s o en formularios. Por esto último se dice que se realiza un referencia directa de ellos, porque según la información que contengan estos parámetros, se accederá a uno u otro dato. Como mejor lo veremos será poniendo un ejemplo, así que vamos a ello.

Imaginad que tenemos una aplicación donde hay un enlace que carga la información de un número de cuenta, y el enlace tiene la siguiente forma:

Usuario para el ejemplo: 44444444A

Cuenta para el ejemplo: 21010005130002713345

Url: https://www.bancoejemplo/cuentas.php?cuenta=21010005130002713345

Con esto se cargarían los movimientos de dicha cuenta propiedad del usuario, pero ¿y si meto otro número de cuenta que no sea mía? En principio, si todo se hubiera hecho correctamente, debería mostrar un error al estar introduciendo una cuenta ajena, pero si somos vulnerable a la referencia directa de objetos de forma insegura (vaya nombrecito) nos mostrará los datos de esta cuenta sin ser nuestra.

Otro ejemplo de todo esto, podría ser la descarga de un fichero mal controlada.

Url ejemplo: http://www.ej.org/descarga.php?dir=nomina&file=44444444A.pdf

A partir de está url con una pequeña modificación, podríamos descargar la nómina de cualquiera. Es más, si no se lleva un buen control de servicios en el servidor, podríamos descargar cualquier fichero, un ejemplo sería:

Url ejemplo: http://www.ej.org/descarga.php?dir=../../../etc&file=passwd

Como podéis ver, no estamos haciendo ningún tipo de inyección propiamente dicho, simplemente, estamos modificando el parámetro a buscar, con lo cual filtrar parámetros, como ya vimos se hacía para evitar la inyección no serviría.

Para evitar este tipo de vulnerabilidades, tenemos que intentar realizar referencias a objetos de forma indirecta (sacando los datos de sesión) o acompañar las referencias directas con indirectas.

Poe ejemplo, para el caso del ejemplo uno, en select que utilizaríamos para recuperar los datos de la cuenta, dicho número de cuenta debería de ir también acompañado del dato del cliente que sacaríamos de sesión, de está forma, en caso de no ser el propietario, no nos devolvería sus datos.

Bueno, espero que os sirva para no solo saber la definición de memoria si algún día tenéis que hablar sobre esto. Nos vemos.

 

Anuncios
 
Deja un comentario

Publicado por en 16 enero, 2011 en OWASP

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: