Se ha descubierto una vulnerabilidad en el motor de navegación Gecko (CVE-2026-6770) que permite generar identificadores únicos para rastrear la apertura de diferentes sitios desde un mismo navegador. El problema se manifiesta en todos los navegadores basados en Firefox, incluyendo Tor Browser, y funciona incluso en modo de navegación privada. Los identificadores están activos dentro del proceso actual del navegador y se restablecen después de reiniciar el navegador. La vulnerabilidad ha sido corregida en las versiones de Firefox 150/140.10.0 y Tor Browser 15.0.10.
Para generar un identificador, es suficiente crear a través de la API IndexedDB la misma secuencia de bases de datos en diferentes sitios, y luego evaluar el orden de estas bases de datos como resultado de la llamada al método indexedDB.databases(). Para diferentes instancias del navegador, el orden de enumeración de las bases de datos será diferente, pero para una sola instancia se repetirá. Este orden se mantiene hasta reiniciar el navegador y se reproduce independientemente del sitio web que se abra.
Por ejemplo, después de crear la base de datos "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r" en una instancia de Firefox, el método indexedDB.databases() siempre devolverá "g,c,p,a,l,f,n,r,d,j,b,o,h,e,m,i,k", mientras que en otra instancia devolverá "j,b,o,h,e,m,i,k,f,n,r,d,g,c,p,a,l". Al crear 16 bases de datos, se puede obtener aproximadamente 44 bits de entropía para identificación. La limpieza de los almacenamientos locales del navegador y la actualización de la cadena de nodos Tor haciendo clic en "Nueva Identidad" en Tor Browser no afectan a la generación del identificador. Este método también puede utilizarse para identificar a los usuarios en una ventana de navegación privada.
La vulnerabilidad es causada por la peculiaridad en la implementación de la API IndexedDB, donde el orden de las bases de datos es influenciado por la disposición de las estructuras internas, especificas para cada instancia del proceso del navegador. El orden de los elementos en la lista de bases de datos devuelta por el método indexedDB.databases() no depende de los nombres de las bases de datos ni del orden de su creación, sino de la ubicación en la tabla hash global de los UUID internos, asociados con los nombres de archivo en los que se almacenan las bases de datos en el disco.
Fuente: opennet.ru
