Я знайшов серйозну ваду в режимі приватного перегляду Mozilla.

Якщо його не виправити, цей недолік міг спричинити хаос, але оперативні виправлення Mozilla врятували день.

У цій статті я обговорюю деталі помилки, яку я виявив у режимі приватного перегляду Mozilla Firefox, що дозволило відстежувати приватні сеанси перегляду.

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

Запропоновані функції можуть відрізнятися від одного браузера до іншого, але принаймні користувач, що користується приватним переглядом, має дві основні вимоги:

1. Веб-сайти, які відвідують приватно, не можуть зберігати будь-які дані

2. Відвідані сторінки не зберігаються

Ну, я виявив, що режим приватного перегляду браузера Firefox не відповідав жодній із зазначених вимог.

Технічні деталі

Щоб веб-сайт відстежував користувача протягом приватних сеансів перегляду, йому потрібно використовувати постійне сховище на рівні браузера.

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

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

IndexedDB - це низькорівневий API для зберігання на стороні клієнта значного обсягу структурованих даних, включаючи файли / краплі - Mozilla Developer Network

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

Якщо ви використовуєте IndexedDB безпосередньо на веб-сторінці, це видасть помилку:

Але що станеться, якщо ви поєднаєте IndexedDB з веб-роботами?

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

Деталі випуску: Fallout

До IndexedDB можна отримати доступ в режимі приватного перегляду через веб-працівників. Мало того, але коли браузер закритий, дані 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 Bounty Program призначена для заохочення досліджень безпеки в програмному забезпеченні Mozilla та винагороди тих, хто допомагає нам створити найбезпечніше програмне забезпечення в Інтернеті.

Я повідомив про цю проблему в жовтні 2017 року за допомогою їхньої програми Bounty Program, і проблема була виправлена ​​в листопаді 2017 року. Їм було запропоновано виявити та виправити проблеми.

Щоб отримати докладнішу інформацію, ви можете прочитати повний звіт про помилки в Bugzilla від Mozilla.

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

Щасливого злому!

Ви можете стежити за мною у Twitter у Konark Modi

Дякуємо за читання та обмін! :)

Якщо вам сподобалась ця історія, сміливо ??? кілька разів (до 50 разів. Серйозно).

Подяки: Особлива подяка Ремі та Паллаві за перегляд цієї публікації :)