Cómo una web sabe tu edad, idioma y sexo robando los datos de Facebook


Las técnicas de WebBrowsing Fingerprinting se han especializado durante mucho tiempo en realizar trucos de todo tipo para poder saber quién está delante de la web sin necesidad de que el usuario se lo diga. Desde el uso de las supercookies de todo tipo - hasta de Batería -, pasando por las técnicas de Perfect Pixel hasta averiguar la ubicación de una persona por los archivos que tiene cargados en la caché por haber visitado una web en una localización específica usando una técnica de Time-Based Web History Disclosure. Hoy os quiero contar un caso publicado por el investigadorTom Van Goethem (@tomvangoethem) que tiene que ver con cómo robar tu edad, tu sexo y tu idioma de Facebook por medio de un side-chanel.

Aunque lo voy a centrar en el caso de Facebook, este tipo de técnicas, como él explica en su trabajo de investigación disponible en el artículo "Request and Conquer: Exposing Cross-Origin Resource Size" y en la presentación que ha dado recientemente en OWASP AppSec EU, puede aplicarse a otras redes sociales comoTwitter o Linkedin que permiten restringir contenido también en función de los parámetros de la persona que está visitando la red social. Vamos por partes para entender el robo de datos.

Browser-Based Timing Attacks

La técnica de robo de datos de las redes sociales remotamente se basa en utilizar una de mis técnicas favoritas para extraer información a ciegas por un side-chanel:El tiempo. Como sabéis, los side-chanels son canales paralelos que, dependiendo de la información a la que se ha accedido, permiten saber si se ha tenido éxito en una acción o no, o conocer más detalles de la información que hay detrás, como en este caso, el tamaño de las respuestas. Por ejemplo, en el caso de los ataques de Time-Based XSPA (Cross-Site Port Attack) en WordPress o Time-Based XSPA en DBKISS se utiliza el tiempo de respuesta para saber si una web tiene un determinado puerto abierto o cerrado. No se necesita tener ningún mensaje de error distinto cuando el puerto está abierto o cerrado y, simplemente con medir el tiempo de respuesta, se puede saber cómo se comportó el servidor que se intentó escanear y cuál es el estado de ese puerto.
  
Este tipo de ataques basados en el tiempo como side-chanel han sido y son muy populares junto a las técnicas de SQL Injection, como son los ataques de Time-Based Blind SQL Injection using Heavy Queries u otros entornos criptográficos como el caso de Lucky13 o el bug del artículo de ayer que permite enumerar usuarios en un servidor Linux usando un Time-Based info leak en OpenSSH que se produce enviando una contraseña de gran tamaño que se hashea solo cuando el usuario existe.

En este caso, el investigador proponer calcular el tamaño de un recurso descargado desde una web remota usando dos trucos distintos en el navegador. Ambos se producen en dos acciones que se ejecutan en el navegador una vez que se descarga el recurso y que por tanto eliminan cualquier problema que tenga que ver con la latencia de red, la compresión de los ficheros en el servidor, el uso de servidores de caché de red, etcétera. Es decir, el recurso se descarga, se procesa por un algoritmo en el navegador y dependiendo de si el tamaño el mayor o menor, el tiempo que tardará dicho algoritmo será diferente. Midiendo ese tiempo de procesado se puede inferir el tamaño del recurso descargado.