BrowExt - permissions & host_permissions

Support HackTricks

Basic Information

permissions

Дозволи визначаються у файлі розширення manifest.json за допомогою властивості permissions і дозволяють доступ до майже всього, до чого може отримати доступ браузер (Cookies або Фізичне Сховище):

Попередній маніфест оголошує, що розширення потребує дозволу storage. Це означає, що воно може використовувати API зберігання для постійного зберігання своїх даних. На відміну від cookies або API localStorage, які надають користувачам певний рівень контролю, сховище розширення зазвичай можна очистити лише видаливши розширення.

Розширення запитуватиме дозволи, вказані у його manifest.json файлі, і після встановлення розширення ви можете завжди перевірити його дозволи у вашому браузері, як показано на цьому зображенні:

Ви можете знайти повний список дозволів, які може запитувати розширення Chromium Browser тут і повний список для розширень Firefox тут.

host_permissions

Необов'язкове, але потужне налаштування host_permissions вказує, з якими хостами розширення зможе взаємодіяти через API, такі як cookies, webRequest та tabs.

Наступні host_permissions в основному дозволяють доступ до кожного веб:

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

Це хости, до яких браузерна розширення може отримати доступ без обмежень. Це пов'язано з тим, що коли браузерне розширення викликає fetch("https://gmail.com/"), воно не обмежене CORS.

Зловживання permissions та host_permissions

Вкладки

Більше того, host_permissions також відкриває “розширену” tabs API функціональність. Вони дозволяють розширенню викликати tabs.query() і не лише отримувати список вкладок браузера користувача, але й дізнаватися, яка веб-сторінка (тобто адреса та заголовок) завантажена.

Не лише це, слухачі, такі як tabs.onUpdated стають набагато кориснішими. Вони будуть сповіщені щоразу, коли нова сторінка завантажується у вкладку.

Виконання контентних скриптів

Контентні скрипти не обов'язково записуються статично в маніфест розширення. За наявності достатніх host_permissions, розширення також можуть завантажувати їх динамічно, викликаючи tabs.executeScript() або scripting.executeScript().

Обидва API дозволяють виконувати не лише файли, що містяться в розширеннях як контентні скрипти, але й произвольний код. Перший дозволяє передавати JavaScript код як рядок, тоді як другий очікує JavaScript функцію, яка менш схильна до вразливостей ін'єкцій. Проте, обидва API можуть завдати шкоди, якщо їх неправильно використовувати.

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

Непрямі привілеї

Деякі привілеї розширення не потрібно явно оголошувати. Один приклад - tabs API: його базова функціональність доступна без будь-яких привілеїв. Будь-яке розширення може бути сповіщене, коли ви відкриваєте та закриваєте вкладки, воно просто не знатиме, з яким веб-сайтом ці вкладки пов'язані.

Звучить занадто безпечно? tabs.create() API є менш безпечним. Його можна використовувати для створення нової вкладки, фактично так само, як window.open(), який може бути викликаний будь-яким веб-сайтом. Проте, поки window.open() підлягає блокувальнику спливаючих вікон, tabs.create() - ні.

Розширення може створювати будь-яку кількість вкладок, коли захоче.

Якщо ви переглянете можливі параметри tabs.create(), ви також помітите, що його можливості значно перевищують те, що window.open() дозволяє контролювати. І хоча Firefox не дозволяє використовувати data: URI з цим API, Chrome не має такої захисту. Використання таких URI на верхньому рівні було заборонено через зловживання для фішингу.

tabs.update() дуже схоже на tabs.create(), але модифікує існуючу вкладку. Таким чином, зловмисне розширення може, наприклад, довільно завантажити рекламну сторінку в одну з ваших вкладок, і воно також може активувати відповідну вкладку.

Веб-камера, геолокація та інші

Ви, напевно, знаєте, що веб-сайти можуть запитувати спеціальні дозволи, наприклад, для доступу до вашої веб-камери (інструменти відеоконференцій) або географічного положення (карти). Це функції з значним потенціалом для зловживання, тому користувачі щоразу повинні підтверджувати, що вони все ще хочуть цього.

Не так з браузерними розширеннями. Якщо браузерне розширення хоче доступ до вашої веб-камери або мікрофона, йому потрібно лише один раз запитати дозвіл

Зазвичай, розширення робить це відразу після установки. Як тільки цей запит прийнято, доступ до веб-камери можливий у будь-який час, навіть якщо користувач не взаємодіє з розширенням у цей момент. Так, користувач прийме цей запит лише якщо розширення дійсно потребує доступу до веб-камери. Але після цього їм потрібно довіряти розширенню, щоб воно не записувало нічого таємно.

З доступом до вашого точного географічного положення або вмісту вашого буфера обміну, надання дозволу явно зовсім не є необхідним. Розширення просто додає geolocation або clipboard до запису дозволів свого маніфесту. Ці привілеї доступу надаються імпліцитно, коли розширення встановлюється. Таким чином, зловмисне або скомпрометоване розширення з цими привілеями може створити ваш профіль переміщення або моніторити ваш буфер обміну для скопійованих паролів, не помічаючи нічого.

Додавання ключового слова history до запису дозволів маніфесту розширення надає доступ до history API. Це дозволяє отримувати всю історію перегляду користувача одразу, не чекаючи, поки користувач знову відвідає ці веб-сайти.

Дозвіл bookmarks має подібний потенціал для зловживання, цей дозволяє читати всі закладки через bookmarks API.

Дозвіл на зберігання

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

Проте, рекламні компанії також можуть зловживати цим сховищем.

Більше дозволів

Ви можете знайти повний список дозволів, які може запитувати розширення браузера Chromium тут та повний список для розширень Firefox тут.

Запобігання

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

Браузери можуть ще більше обмежити зловживання привілеями розширення. Наприклад, API tabCapture та desktopCapture Chrome, які використовуються для запису екрану, розроблені для мінімізації зловживань. API tabCapture може бути активовано лише через безпосередню взаємодію користувача, таку як натискання на значок розширення, тоді як desktopCapture вимагає підтвердження користувача для запису вікна, запобігаючи таємним записам.

Проте, посилення заходів безпеки часто призводить до зниження гнучкості та зручності використання розширень. Дозвіл activeTab ілюструє цю компроміс. Він був введений, щоб усунути необхідність для розширень запитувати привілеї хостів по всьому інтернету, дозволяючи розширенням отримувати доступ лише до поточної вкладки за явною активацією користувача. Ця модель ефективна для розширень, які потребують дій, ініційованих користувачем, але не підходить для тих, які потребують автоматичних або превентивних дій, тим самим компрометуючи зручність та миттєву реакцію.

Посилання

Підтримати HackTricks

Last updated