BrowExt - permissions & host_permissions
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
permissions
Дозволи визначаються у файлі розширення manifest.json
за допомогою властивості permissions
і дозволяють доступ до майже всього, до чого може отримати доступ браузер (Cookies або Фізичне Сховище):
Попередній маніфест оголошує, що розширення потребує дозволу storage
. Це означає, що воно може використовувати API зберігання для постійного зберігання своїх даних. На відміну від cookies або API localStorage
, які надають користувачам певний рівень контролю, сховище розширення зазвичай можна очистити лише шляхом видалення розширення.
Розширення запитуватиме дозволи, вказані у його manifest.json
файлі, і після встановлення розширення ви завжди можете перевірити його дозволи у вашому браузері, як показано на цьому зображенні:
Ви можете знайти повний список дозволів, які може запитувати розширення браузера Chromium тут та повний список для розширень Firefox тут.
host_permissions
Необов'язкове, але потужне налаштування host_permissions
вказує, з якими хостами розширення зможе взаємодіяти через API, такі як cookies
, webRequest
та tabs
.
Наступні host_permissions
в основному дозволяють доступ до кожного веб:
Це хости, до яких браузерна розширення може отримати доступ без обмежень. Це пов'язано з тим, що коли браузерне розширення викликає 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 ілюструє цю компроміс. Він був введений, щоб усунути необхідність для розширень запитувати привілеї хостів по всьому інтернету, дозволяючи розширенням отримувати доступ лише до поточної вкладки за явною активацією користувача. Ця модель ефективна для розширень, які потребують дій, ініційованих користувачем, але не підходить для тих, які потребують автоматичних або превентивних дій, тим самим компрометуючи зручність та миттєву реакцію.
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)