Уязвимость в браузерном движке Gecko позволяет отслеживать пользователей через API IndexedDB даже в приватном режиме

vulnerability

В браузерном движке Gecko (основа Firefox, Tor Browser и других производных) обнаружена уязвимость CVE-2026-6770, которая позволяет сайтам формировать уникальные идентификаторы для отслеживания активности пользователя. Проблема проявляется во всех браузерах на базе Firefox, включая Tor Browser, и работает даже в режиме приватного просмотра. Идентификаторы действуют в рамках текущего процесса браузера и сбрасываются только после его полного перезапуска. Уязвимость уже устранена в выпусках Firefox 150, Firefox ESR 140.10.0 и Tor Browser 15.0.10.

Уязвимость CVE-2026-6770

Суть проблемы кроется в реализации API IndexedDB (интерфейс для хранения структурированных данных на стороне клиента). Метод "indexedDB.databases()" возвращает список баз данных, доступных текущему веб-сайту. В нормальной ситуации порядок этого списка не должен нести никакой идентифицирующей информации, однако в браузерах на Gecko он оказался детерминированным и стабильным на всё время жизни процесса. Выяснилось, что порядок элементов зависит не от имён баз данных или порядка их создания, а от размещения их внутренних UUID-хешей (универсальных уникальных идентификаторов) в глобальной хэш-таблице, ассоциированной с именами файлов на диске. Эта хэш-таблица является общей для всех источников (сайтов) и перестраивается только при полном перезапуске браузера.

Чтобы получить идентификатор, злоумышленнику достаточно организовать на двух разных сайтах одинаковую последовательность создания баз данных через IndexedDB. Например, после создания баз с именами "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" в одном экземпляре Firefox метод "indexedDB.databases()" всегда вернёт устойчивый порядок, например "g,c,p,a,l,f,n,d,j,b,o,h,e,m,i,k", а в другом экземпляре - иной, но также неизменный. Таким образом, разные сайты могут независимо друг от друга получить один и тот же идентификатор и понять, что взаимодействуют с одним и тем же экземпляром браузера. При создании 16 баз данных можно получить около 44 бит энтропии - этого более чем достаточно для однозначной идентификации среди большого числа пользователей.

Особую опасность уязвимость представляет для режимов приватного просмотра и Tor Browser. В Firefox Private Browsing идентификатор сохраняется даже после закрытия всех приватных окон, если процесс браузера остаётся активным. Очистка локальных хранилищ, куки и истории не влияет на него. В Tor Browser ситуация ещё серьёзнее: функция "New Identity", которая предназначена для полного сброса состояния (очистка куки, истории, смена цепочки узлов Tor), также не удаляет этот идентификатор. Следовательно, сайты могут связывать сессии, которые пользователь считает полностью изолированными. Это прямо противоречит гарантиям неотслеживаемости, на которые полагаются пользователи Tor.

С технической точки зрения, уязвимость возникает из-за того, что внутренняя хэш-таблица "StorageDatabaseNameHashtable", используемая в коде "dom/indexedDB/ActorsParent.cpp", хранит соответствие между именами баз данных и сгенерированными UUID. При вызове "indexedDB.databases()" браузер собирает имена файлов через "QuitClient::GetDatabaseFilenames()" и помещает их в "nsTHashSet" без какой-либо сортировки. Итерация по этому множеству в порядке его внутренней раскладки и даёт стабильный перечень. Поскольку хэш-таблица и множество являются общими для всего процесса, все сайты видят один и тот же порядок.

Разработчики Mozilla и Tor Project оперативно отреагировали на ответственное раскрытие уязвимости. Исправление заключается в том, чтобы возвращать результаты метода "indexedDB.databases()" в каноническом порядке - например, в лексикографическом. Это устраняет источник энтропии, не нарушая функциональности API. Патч включён в Firefox 150, Firefox ESR 140.10.0 и выпуски Thunderbird 150 и 140.10.0. Пользователям настоятельно рекомендуется обновить браузеры до последних версий. Для специалистов по информационной безопасности это ещё один важный урок: даже безобидный на первый взгляд API может стать каналом для скрытого отслеживания, если он раскрывает стабильное состояние, общее для нескольких источников. В данном случае проблема была вызвана не уязвимостью в изоляции источников, а детерминированным раскрытием деталей внутренней реализации.

Таким образом, уязвимость CVE-2026-6770 является ярким примером того, как небольшая особенность реализации может привести к серьёзным последствиям для приватности. Она затрагивает миллионы пользователей Firefox и Tor Browser, подрывая доверие к защитным механизмам приватного просмотра и анонимности. К счастью, исправление простое и уже доступно. Главное - не откладывать обновление.

Ссылки

Комментарии: 0