Nueva filtración del historial del navegador a través de favicon

Recientemente me encontré con este estudio en pdf (ya había un artículo sobre Habré para él), después de leerlo, decidí buscar formas más interesantes de usar F-Cache. Objetivamente, nadie en su sano juicio pondrá un esquema con redireccionamientos en su sitio web. Esta es una filtración, pero una filtración de interés más teórico que práctico (en mi humilde opinión).





Esbozó un objetivo (encontrar una manera de probar F-Cache a través de javascript) y comenzó a buscar. Durante los experimentos, identifiqué varias formas de hacer esto, pero describiré la más interesante, en mi opinión.





Se lo advierto de antemano: esta no es una solución para varios navegadores. Por el momento, solo lo he probado en Chrome de escritorio.





La prueba preliminar se puede realizar aquí: https://favicon-leak.site/





Cómo funciona

Chromium tiene dos tipos de cachés de recursos: disco y memoria. Como muchos han adivinado, la caché de disco es un almacenamiento permanente de recursos, pero con su propio retraso de lectura (1+ ms). A su vez, la memoria caché se utiliza para el almacenamiento temporal de los recursos de uso frecuente y las lecturas, en promedio, son instantáneas (0 ms). Por lo tanto, al colocar un recurso en la memoria caché, el navegador reduce el número de lecturas del disco y aumenta la velocidad de recarga de los propios recursos.





Cuando cargamos una imagen por primera vez a través de <img>, se cargará a través de src o se tomará del caché del disco. En ambos casos, esta imagen se coloca con mayor frecuencia en la memoria caché. Considere este código javascript:





var img = new Image();
img.src = some_image_url;
if (img.complete && img.height + img.width > 0) {
	//   TRUE,        memory cache
}
      
      



Es este código el que le permite verificar la presencia de una imagen en la memoria caché. De esto, podemos sacar la siguiente conclusión: si carga <img> al menos dos veces, entonces la segunda vez la imagen debe cargarse desde la memoria caché.





<img> + <img> + <img> + <img>
<img> + <img> + <img> + <img>

El comportamiento de la etiqueta <link rel = "icon"> es diferente de <img> y la recarga de una imagen siempre la lee del disco:





<enlace> + <enlace> + <enlace> + <enlace>
<enlace> + <enlace> + <enlace> + <enlace>

El hallazgo clave fue este comportamiento del navegador:





<img> + <img> + <link> + <img>
<img> + <img> + <link> + <img>

, <link>, disk cache <img> ( memory). , F-Cache. ! <link> F-Cache, , memory cache, . , , F-Cache . ,

<img> + <img> + <link> + <img> <— , , F-Cache .. memory cache. , F-Cache.





, 100%- , .. <link>(, ), setTimeout. timeout, , <link> .





F-Cache

F-Cache , , . F-Cache cache policy -. F-Cache read-only .





https://favicon-leak.site/

Usando Chrome automatizado, armé una pequeña lista de enlaces de favicon para sitios populares. https://favicon-leak.site/ comprueba los iconos de esta lista. Quizás para cuando lea este artículo, algunos enlaces estarán desactualizados y devolverán un resultado falso negativo.





Código en github








All Articles