BrowExt - permissions & host_permissions

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Основна інформація

permissions

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

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

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

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

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

Виконання скриптів вмісту

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

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

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

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

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

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

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

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

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

Вебкамера, геолокація та друзі

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

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

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

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

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

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

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

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

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

Ще дозволи

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

Запобігання

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

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

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

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated