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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Basic Information
permissions
Дозволи визначаються у файлі розширення manifest.json
за допомогою властивості permissions
і дозволяють доступ практично до всього, до чого може отримати доступ браузер (Cookies або Фізичне Сховище):
Попередній маніфест оголошує, що розширення потребує дозволу storage
. Це означає, що воно може використовувати API зберігання для постійного зберігання своїх даних. На відміну від cookies або API localStorage
, які надають користувачам певний рівень контролю, сховище розширення зазвичай можна очистити лише видаливши розширення.
Розширення запитуватиме дозволи, вказані у його файлі manifest.json
, і після встановлення розширення ви можете завжди перевірити його дозволи у вашому браузері, як показано на цьому зображенні:
.png)
Ви можете знайти повний список дозволів, які може запитувати розширення браузера Chromium, тут та повний список для розширень 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() і не лише отримувати список вкладок браузера користувача, але й дізнаватися, яка веб-сторінка (тобто адреса та заголовок) завантажена.
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 ілюструє цю компроміс. Він був введений, щоб усунути необхідність для розширень запитувати привілеї хостів по всьому інтернету, дозволяючи розширенням отримувати доступ лише до поточної вкладки за явною активацією користувача. Ця модель ефективна для розширень, які потребують дій, ініційованих користувачем, але не підходить для тих, які потребують автоматичних або превентивних дій, тим самим компрометуючи зручність та миттєву реакцію.
Посилання
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.