BrowExt - permissions & host_permissions

Reading time: 8 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Basic Information

permissions

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

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

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

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

host_permissions

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

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

json
"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() і не лише отримувати список вкладок браузера користувача, але й дізнаватися, яка веб-сторінка (тобто адреса та заголовок) завантажена.

caution

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

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

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

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

caution

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

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

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

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

caution

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

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

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

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

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

caution

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

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

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

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

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

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

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

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

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

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

Запобігання

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

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

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

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks