Если бы этот недостаток не исправили, он мог бы нанести серьезный ущерб, но быстрые исправления Mozilla спасли положение.

В этой статье я подробно расскажу об ошибке, обнаруженной мной в режиме частного просмотра Mozilla Firefox, которая позволила отслеживать сеансы приватного просмотра.

Приватный просмотр - одна из наиболее широко известных и используемых сегодня функций в современных браузерах. Браузеры постоянно добавляют множество улучшений в приватный просмотр, чтобы повысить конфиденциальность пользователей.

Предлагаемые функции могут отличаться от одного браузера к другому, но, по крайней мере, пользователь, использующий частный просмотр, имеет два основных требования:

1. Веб-сайты, посещаемые в частном порядке, не могут сохранять какие-либо данные.

2. Посещенные страницы не сохраняются.

Что ж, я обнаружил, что режим приватного просмотра в браузере Firefox не соответствует ни одному из вышеперечисленных требований.

Технические подробности

Чтобы веб-сайт мог отслеживать пользователя в сеансах приватного просмотра, ему необходимо использовать постоянное хранилище на уровне браузера.

Есть несколько способов хранения данных в браузере - LocalStorage, WebSQL и IndexedDB.

Недавно я наткнулся на хранилище IndexedDB.

IndexedDB - это низкоуровневый API для хранения на стороне клиента значительных объемов структурированных данных, включая файлы / большие двоичные объекты - Mozilla Developer Network

Хотя, согласно документации, IndexedDB не должен быть доступен в режиме частного просмотра.

Если вы используете IndexedDB непосредственно на веб-странице, будет выдана ошибка:

Но что произойдет, если объединить IndexedDB с Web Workers?

Web Workers позволяет запускать операцию сценария в фоновом потоке отдельно от основного потока выполнения веб-приложения - Mozilla Developer Network

Сведения о проблеме: Fallout

Доступ к IndexedDB можно получить в режиме приватного просмотра через Web Workers. Более того, когда браузер закрыт, данные IndexedDB не очищаются. Эти сохраненные данные будут сохраняться в течение нескольких сеансов приватного просмотра, потому что они не удаляются при выходе. 😮

Итак, давайте рассмотрим несколько способов злоупотребления этой проблемой.

Веб-сайты

Вредоносный веб-сайт может использовать IndexedDB и отслеживать пользователей в приватных сеансах просмотра. Например, предположим, что вы посетили badsite.com, который использует Web Workers и IndexedDB в режиме частного просмотра. Закройте окно приватного просмотра, закройте Firefox, снова запустите Firefox, запустите режим приватного просмотра и снова посетите badsite.com. Веб-сайт сможет получить доступ к данным из вашего предыдущего частного сеанса просмотра, поскольку данные все еще хранятся в IndexedDB.

Сторонние

Предположим, siteA.com загружает скрипт аналитики из BadAnalyticsSite.com. Затем другой веб-сайт, siteB.com, также загружает скрипт аналитики из тот же сайт BadAnalyticsSite.com. Поскольку вредоносный веб-сайт BadAnalyticsSite.com использует Web Workers и IndexedDB, веб-сайт BadAnalyticsSite.com теперь может отслеживать пользователей веб-сайтов siteA.com и siteB.com во всех сеансах приватного просмотра.

Утечка диска

IndexedDB придерживается политики одного и того же происхождения, что означает, что каждая база данных имеет имя, идентифицирующее ее в пределах источника. Поскольку имя домена используется как часть имени файла, это может привести к серьезным проблемам при использовании в частном режиме.

Например, если пользователь посещает тестовую веб-страницу (демонстрацию), которая использует Web Workers + IndexedDB, размещенную на cdn.cliqz.com, и загружает ресурс из konarkmodi.github.io, на диске создаются следующие две записи.

Из-за вышеуказанного недостатка веб-сайт / трекер может эффективно генерировать отпечаток пальца и сохранять его. Даже если пользователь очистит историю веб-сайта или выберет опцию «забыть об этом сайте», хранилище IndexDB не будет удалено. Это может создать постоянное хранилище для веб-сайта или трекера, которое можно использовать вечно.

Отчет и исправления

Mozilla поощряет исследования безопасности своих продуктов. По их собственным словам:

Программа вознаграждения за ошибки в Mozilla Client Security предназначена для поощрения исследований в области безопасности программного обеспечения Mozilla и для поощрения тех, кто помогает нам создавать самое безопасное из существующих программ Интернета.

Я сообщил об этой проблеме в октябре 2017 года через их Bug Bounty Program, и проблема была исправлена ​​в ноябре 2017 года. Они оперативно выявили и исправили проблемы.

Для получения более подробной информации вы можете прочитать полный отчет об ошибке в Mozilla’s Bugzilla.

Я очень ценю усилия и действия Mozilla по устранению проблем с наивысшим приоритетом, когда речь идет о конфиденциальности пользователей.

Удачного взлома!

Вы можете подписаться на меня в Twitter на Konark Modi.

Спасибо, что прочитали и поделились! :)

Если вам понравилась эта история, не стесняйтесь несколько раз (до 50 раз. Серьезно).

Благодарности: Особая благодарность Реми и Паллави за рецензирование этого сообщения :)