Для формирования идентификатора достаточно на разных сайтах создать через API IndexedDВ одну и ту же последовательность БД, после чего оценить порядок следования этих БД в результате вызова метода indexedDB.databases(). Для разных экземпляров браузера порядок перечисления БД будет отличаться, но для одного — повторяться.
Подобный порядок сохраняется до перезапуска браузера и воспроизводится независимо от открываемого сайта.
Например, после создания БД «a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r» в одном экземпляре Firefox метод indexedDB.databases() всегда будет возвращать
«g,c,p,a,l,f,n,r,d,j,b,o,h,e,m,i,k», а в другом экземпляре — «j,b,o,h,e,m,i,k,f,n,r,d,g,c,p,a,l». При создании 16 БД можно получить около 44 бит энтропии для идентификации. На генерацию идентификатора не влияет очистка локальных браузерных хранилищ и обновление цепочки Tor-узлов кнопкой «New Identity» в Tor Browser. Метод также может использоваться для идентификации пользователей в окне приватного просмотра.
Уязвимость вызвана особенностью реализации API IndexedDВ, на порядок следования БД в которой влияет раскладка внутренних структур, специфичная для каждого экземпляра рабочего процесса браузера. Порядок элементов в списке БД, возвращаемом методом indexedDB.databases(), зависит не от имён БД или порядка создания БД, а от размещения в глобальной хэш-таблице внутренних UUID-хешей, ассоциированных с именами файлов, в которых хранятся БД на диске.
Источник: http://www.opennet.ru/opennews/art.shtml?num=65272
