Если бы этот недостаток не исправили, он мог бы нанести серьезный ущерб, но быстрые исправления 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 раз. Серьезно).
Благодарности: Особая благодарность Реми и Паллави за рецензирование этого сообщения :)