miércoles, 30 de enero de 2013

Fotos de Instagram sin ningún tipo de privacidad

No sé muy bien como empezar la entrada... el caso es que hoy un amigo me dijo que se había registrado en Instagram y yo le comenté que decidí borrarlo porque todas las fotos se hacían publicas, sí o sí. A lo que él me constó que todo eso había cambiado y que ahora tenías la posibilidad de ocultar las fotos a quienes no te siguieran.

Y allá que fui yo a ver hasta que punto era cierto eso. Me picó la curiosidad y lo primero que hice fue volver a registrarme en Instagram a través de mi móvil. Me metí en la configuración del perfil y activé la opción de "Las fotos son privadas".

Img.1: Configuración de privacidad en Instagram

Una vez que hice eso le pregunté a mi amigo -que en ese momento no me seguía en Instagram-  que intentara ver alguna foto. Y efectivamente no podía ver ninguna foto a no ser que él le diera al botón de seguir y yo le aceptara.

Pero es curioso, porque al meterme en mi perfil a través de la web, me fijé en la url donde se almacenaba la foto, y ésta si se podía ver desde cualquier navegador sin necesidad de estar registrado en la página y mucho menos de haber iniciado sesión.

Por defecto las imágenes se almacenan en distintos servidores de Amazon. Y luego por otro lado Instagram les añade su propio "Link".

Si intentamos ver la foto desde el Link que nos ofrece Instagram, veremos como no nos lo muestra.

URL: http://instagram.com/p/VFEWn-zb3M/
Img.2: Mensaje de que Instagram no puede mostrar la página

Ahora bien, si cogemos la URL entera desde los servidores de amazon veremos la imágen tal cual.

URL: http://distilleryimage4.s3.amazonaws.com/f37e42c86a4811e28ed022000a1fbc58_7.jpg
Img.3: Foto de Instagram
Ésta URL la cogí en la típica opción del navegador de "ver imagen de fondo" dentro de mi propio perfil.

Haciendo un poco de análisis forense decidí ver la información que guardaría la propia aplicación dentro del teléfono. Como era de esperar la aplicación guardaba en una carpeta caché las imágenes separadas por carpetas. En cada carpeta se almacenan dos imágenes, una la de la imagen en miniatura, y otra la foto original.

El nombre de cada carpeta es la url donde almacena la imagen, y las fotos son nombradas igual con terminaciones distintas dependiendo del tamaño.

Si la terminación es en 7: la imagen es la original, es decir la de mayor tamaño.
Si la terminación es en 6: es una miniatura de tamaño medio que se usará para la versión web.
Si la terminación es el 5: (supongo) que será para la miniatura de la versión móvil.

http://distilleryimage4.s3.amazonaws.com/f37e42c86a4811e28ed022000a1fbc58_7.jpg

http://distilleryimage4.s3.amazonaws.com/f37e42c86a4811e28ed022000a1fbc58_6.jpg

http://distilleryimage4.s3.amazonaws.com/f37e42c86a4811e28ed022000a1fbc58_5.jpg

En esa misma carpeta encontramos un archivo llamado kDSCacheExpireInfoDictionary

Que no es ni mas ni menos que un listado de las fotos almacenadas en la caché del teléfono.
Img.4: URLs de las fotos que almacenan en la caché.


Como ya me entró curiosidad, le eché un vistazo a la Cookie que almacena y que se envía a los servidores de Instagram y que contiene info tan valiosa como el nombre del usuario el user_Id y el ID de la sesión.

Img.5: Cookie de Instagram

Ahora solo nos falta saber de que manera se asigna un ID a un usuario y descubrir como decide Instagram en que servidores guarda las imágenes. Teniendo esos datos podríamos llegar a ver las fotos de cualquier usuario.

Otra manera es sniffar el tráfico. Pero por lo pronto ya tendríamos que estar en su misma red.

De momento dejo el análisis forense aquí y cuando descubra algo más os voy contando.