miércoles, septiembre 19, 2012

Aplicaciones de Facebook y Privacidad (3 de 3)

Para lograr que con solo navegar a una determinada URL se genere un Access_Token con todos los permisos sin que el usuario los haya aceptado antes, realizando unas pruebas me topé con las aplicaciones desarrolladas por Facebook. Todas estas aplicaciones creadas por los mismos desarrolladores de Facebook no piden permisos al usuario debido a que para ellas no es necesario porque son del mismo Facebook. Algo como suele hacer Apple con sus aplicaciones o ... bueno, ya sabéis.

Esto lo puedes comprobar fácilmente ya que cuando cualquier aplicación en tu iPhone o Android quiere acceder a tus datos en Facebook es necesario darle los permisos, mientras que cuando usas Facebook para iOS o Facebook para Android esto no es así. Es decir, estas aplicaciones tiene una categoría especial que les permite acceso total a tus datos, o lo que es lo mismo, generar un Access_Token para ellas sin interactuar con el usuario. Las aplicaciones que son de Facebook son las que están en Facebook Apps y alguna otra más que no está por ahí.

Conocido esto, es posible suplantar la petición que hace Facebook para iPhone con el objetivo de conseguir un Access_Token con todos los permisos. Si miramos la petición que hace esta aplicación, se puede ver lo siguiente:
https://www.facebook.com/dialog/permissions.request?app_id=6628568379&next=https://facebook.com/connect/login_success.html&response_type=token
Como se puede ver, lo que devuelve esta URL es un Access_Token con todos los permisos para acceder a la cuenta del usuario. Esta es la redirección que se obtiene, con el Access_Token.
https://www.facebook.com/connect/login_success.html#access_token=AAAAAAYsX7TsBAEmjMvxnhzHd6EjaGrGZBnrVsYsdsacHLGNDQiWhOtYHeJpAbA4[CENSORED]MBaodL8r6OsBe6EXkbG1hnumon0YP7xTAvnpYFb&expires_in=87731
Y así, a lo tonto, en ese Acces_Token está el acceso a toda nuestra cuenta, es decir, como si fuera el usuario y la contraseña.

Figura 6: Surprise!

Una key que permite acceder a todos los datos de la cuenta. Por supuesto, para obtener ese Acces_Token de cualquier persona hace falta un poquito de ingeniería social, que haga clic en un enlace malicioso y conseguir el Access_Token de la respuesta mediante un script.

Como Facebook aun no ha hecho nada para corregir eso, la gente malvada y los empresarios de moral distraída y técnicas de Black SEO han comenzado a crear servicios en Internet que te ponen 1000 likes - como el tipo que se cambió el nombre por Mark Zuckerberg por ser baneado y denunciado por Facebook - en estados, fotos, comentarios, etcétera, debido a que almacenan miles de Access_Tokens y los usan para dar el servicio, es decir, te piden tu código y usan los códigos de los demás para darte el servicio, y así sucesivamente.

Hay miles de maneras de robarlo y las mass sencillas son mediante trucos de Phishing, o servicios  de engaño como saber quién usa tu perfil, eliminar la biografía, o saber cuentas que existen en Facebook. Si lo quieren hacer menos llamativos, a los Phishers les bastará con cambiar el esquema de Phishing y pedir a las víctimas que, en lugar de insertar la contraseña y el e-mail, inserte ese Access_Token para ver la información privada de una persona... o lo que se les ocurra.

Como prueba de concepto de la gravedad de esto programe una aplicación que permite realizar distintas funciones como leer los mensajes, ver notificaciones, actualizar estado, dar likes y más con solo ingresar el código de acceso, con la que jugué e hice muy popular algún post gracias a Acces_Tokens cedidos por amigos. Aquí una imagen del programa.

Figura 7: Extrayendo info de una cuenta con un Access_Token "robado"

En este caso, probando la aplicacón con mi cuenta, lo que hice es acceder a toda mi lista de contactos y mostrar el ID, el nombre del contacto - en otras palabras el e-mail de Facebook - y el e-mail de la persona - si no lo han ocultado -. En definitiva muestra a quién le gustaría que le suplanten la identidad en Facebook, ya que tiene el e-mail público - ¡Chema, ponlo público! -.

Seguramente a alguno le llamara la atención la imagen de la Foca allí. Es una función del Graph API de Facebook que se llama “metadata” y lo que hace es listar todas las URLs que contienen los datos del usuario. Y a mí me gusta la FOCA.

En definitiva, la creación de Access_Tokens sin validación por parte del usuario, simplemente suplantando el ID de una aplicación de Facebook es un bug demasiado gravé, del que estoy seguro que Facebook tiene constancia viendo las empresas que bloquea y demanda. Ahora hay que ver si con la difusión masiva lo cierran - aunque sería más engorroso para las aplicaciones Facebook -

Ariel Ignacio La Cono
ignataur@hotmail.com

***************************************************************************************************
- Aplicaciones de Facebook y Privacidad (1 de 3)
- Aplicaciones de Facebook y Privacidad (2 de 3)
- Aplicaciones de Facebook y Privacidad (3 de 3)
***************************************************************************************************

5 comentarios:

  1. Hola,

    no se si me equivoco o estoy mal informado, pero la petición que mencionas para obtener el token de usuario solo daría acceso a la información básica, no? Es decir, no puedo acceder a los mensajes privados, etc. De ese modo, cualquier app debe de pedir explícitamente permisos al usuario y éste aceptarlos.

    saludos!

    ResponderEliminar
  2. Hola Adrián
    La petición que mencioné me da acceso a toda la información del usuario debido a que es una aplicación de Facebook la que esta en esa petición y para Facebook no hace falta pedir los permisos por lo que genera el token sin necesidad de que aceptes nada. Si fuera otra la aplicación solamente tendría acceso a la información básica como decís (a menos que especifique mas permisos en la peticion), y además esa aplicación me pediría los permisos antes de generar el token. Las apps de Facebook no piden los permisos al usuario.

    ResponderEliminar
  3. Es posible que hayan cambiado esta funcionalidad?, el 22/09 podía acced ra toda la información de mi perfil a través de una app de facebook y hoy 24/09 tengo que definir la variable scope= para los permisos que voy a usar... podeis probar??

    saludos,

    ResponderEliminar
  4. No se como será la petición que estas haciendo (si puedes dímela) pero yo he podido acceder a toda la información de mi perfil sin problemas usando esta estructura de petición.. https://www.facebook.com/dialog/permissions.request?app_id=6628568379&next=https://facebook.com/connect/login_success.html&response_type=token
    Como verás no he tenido que establecer un parametro "scope", prueba tu mismo con ella y fíjate bien por las dudas.

    ResponderEliminar
  5. no se si salio el comentario q hice, en fin, ante la duda hago formulo nuevamente la pregunta, anticipando q soy un completo ignorante en cuanto a este tema, esta manera me daria acceso tanto a mis contactos, como a cualquier contacto q no tenga, y q este ultimo a su vez tenga su perfil con los parametros de seguridad habilitados de manera tal q no se lo puede agregar ni mandar mensajes por inbox? se puede acceder pues a toda la informacion igualmente? sepan disculpar mi ignorancia

    ResponderEliminar