mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
141 lines
19 KiB
Markdown
141 lines
19 KiB
Markdown
# BrowExt - permissions & host\_permissions
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
## Basic Information
|
||
|
||
### **`permissions`**
|
||
|
||
Дозволи визначаються у файлі розширення **`manifest.json`** за допомогою властивості **`permissions`** і дозволяють доступ до майже всього, до чого може отримати доступ браузер (Cookies або Фізичне Сховище):
|
||
|
||
Попередній маніфест оголошує, що розширення потребує дозволу `storage`. Це означає, що воно може використовувати [API зберігання](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) для постійного зберігання своїх даних. На відміну від cookies або API `localStorage`, які надають користувачам певний рівень контролю, **сховище розширення зазвичай можна очистити лише видаливши розширення**.
|
||
|
||
Розширення запитуватиме дозволи, вказані у його **`manifest.json`** файлі, і після встановлення розширення ви можете **завжди перевірити його дозволи у вашому браузері**, як показано на цьому зображенні:
|
||
|
||
<figure><img src="../../.gitbook/assets/image (18).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Ви можете знайти [**повний список дозволів, які може запитувати розширення Chromium Browser тут**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) і [**повний список для розширень Firefox тут**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
|
||
|
||
### `host_permissions`
|
||
|
||
Необов'язкове, але потужне налаштування **`host_permissions`** вказує, з якими хостами розширення зможе взаємодіяти через API, такі як [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) та [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/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**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **функціональність.** Вони дозволяють розширенню викликати [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) і не лише отримувати **список вкладок браузера користувача**, але й дізнаватися, яка **веб-сторінка (тобто адреса та заголовок) завантажена**.
|
||
|
||
{% hint style="danger" %}
|
||
Не лише це, слухачі, такі як [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **стають набагато кориснішими.** Вони будуть сповіщені щоразу, коли нова сторінка завантажується у вкладку.
|
||
{% endhint %}
|
||
|
||
### Виконання контентних скриптів <a href="#running-content-scripts" id="running-content-scripts"></a>
|
||
|
||
Контентні скрипти не обов'язково записуються статично в маніфест розширення. За наявності достатніх **`host_permissions`**, **розширення також можуть завантажувати їх динамічно, викликаючи** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **або** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript).
|
||
|
||
Обидва API дозволяють виконувати не лише файли, що містяться в розширеннях як контентні скрипти, але й **произвольний код**. Перший дозволяє передавати JavaScript код як рядок, тоді як другий очікує JavaScript функцію, яка менш схильна до вразливостей ін'єкцій. Проте, обидва API можуть завдати шкоди, якщо їх неправильно використовувати.
|
||
|
||
{% hint style="danger" %}
|
||
На додаток до вищезазначених можливостей, контентні скрипти можуть, наприклад, **перехоплювати облікові дані**, коли вони вводяться на веб-сторінках. Інший класичний спосіб зловживання ними - це **впровадження реклами** на кожному сайті. Додавання **шахрайських повідомлень** для зловживання довірою новинних сайтів також можливе. Нарешті, вони можуть **маніпулювати банківськими** веб-сайтами для перенаправлення грошових переказів.
|
||
{% endhint %}
|
||
|
||
### Непрямі привілеї <a href="#implicit-privileges" id="implicit-privileges"></a>
|
||
|
||
Деякі привілеї розширення **не потрібно явно оголошувати**. Один приклад - [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): його базова функціональність доступна без будь-яких привілеїв. Будь-яке розширення може бути сповіщене, коли ви відкриваєте та закриваєте вкладки, воно просто не знатиме, з яким веб-сайтом ці вкладки пов'язані.
|
||
|
||
Звучить занадто безпечно? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) є менш безпечним. Його можна використовувати для **створення нової вкладки**, фактично так само, як [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open), який може бути викликаний будь-яким веб-сайтом. Проте, поки `window.open()` підлягає **блокувальнику спливаючих вікон, `tabs.create()` - ні**.
|
||
|
||
{% hint style="danger" %}
|
||
Розширення може створювати будь-яку кількість вкладок, коли захоче.
|
||
{% endhint %}
|
||
|
||
Якщо ви переглянете можливі параметри `tabs.create()`, ви також помітите, що його можливості значно перевищують те, що `window.open()` дозволяє контролювати. І хоча Firefox не дозволяє використовувати `data:` URI з цим API, Chrome не має такої захисту. **Використання таких URI на верхньому рівні було** [**заборонено через зловживання для фішингу**](https://bugzilla.mozilla.org/show\_bug.cgi?id=1331351)**.**
|
||
|
||
[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) дуже схоже на `tabs.create()`, але **модифікує існуючу вкладку**. Таким чином, зловмисне розширення може, наприклад, довільно завантажити рекламну сторінку в одну з ваших вкладок, і воно також може активувати відповідну вкладку.
|
||
|
||
### Веб-камера, геолокація та інші <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
|
||
|
||
Ви, напевно, знаєте, що веб-сайти можуть запитувати спеціальні дозволи, наприклад, для доступу до вашої веб-камери (інструменти відеоконференцій) або географічного положення (карти). Це функції з значним потенціалом для зловживання, тому користувачі щоразу повинні підтверджувати, що вони все ще хочуть цього.
|
||
|
||
{% hint style="danger" %}
|
||
Не так з браузерними розширеннями. **Якщо браузерне розширення** [**хоче доступ до вашої веб-камери або мікрофона**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, йому потрібно лише один раз запитати дозвіл**
|
||
{% endhint %}
|
||
|
||
Зазвичай, розширення робить це відразу після установки. Як тільки цей запит прийнято, **доступ до веб-камери можливий у будь-який час**, навіть якщо користувач не взаємодіє з розширенням у цей момент. Так, користувач прийме цей запит лише якщо розширення дійсно потребує доступу до веб-камери. Але після цього їм потрібно довіряти розширенню, щоб воно не записувало нічого таємно.
|
||
|
||
З доступом до [вашого точного географічного положення](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) або [вмісту вашого буфера обміну](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API), надання дозволу явно зовсім не є необхідним. **Розширення просто додає `geolocation` або `clipboard` до** [**запису дозволів**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **свого маніфесту**. Ці привілеї доступу надаються імпліцитно, коли розширення встановлюється. Таким чином, зловмисне або скомпрометоване розширення з цими привілеями може створити ваш профіль переміщення або моніторити ваш буфер обміну для скопійованих паролів, не помічаючи нічого.
|
||
|
||
Додавання ключового слова **`history`** до [запису дозволів](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) маніфесту розширення надає **доступ до** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Це дозволяє отримувати всю історію перегляду користувача одразу, не чекаючи, поки користувач знову відвідає ці веб-сайти.
|
||
|
||
Дозвіл **`bookmarks`** має подібний потенціал для зловживання, цей дозволяє **читати всі закладки через** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
|
||
|
||
### Дозвіл на зберігання <a href="#the-storage-permission" id="the-storage-permission"></a>
|
||
|
||
Сховище розширення - це просто колекція ключ-значення, дуже схожа на [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage), яку може використовувати будь-який веб-сайт. Тому тут не повинно зберігатися чутливої інформації.
|
||
|
||
Проте, рекламні компанії також можуть зловживати цим сховищем.
|
||
|
||
### Більше дозволів
|
||
|
||
Ви можете знайти [**повний список дозволів, які може запитувати розширення браузера Chromium тут**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) та [**повний список для розширень Firefox тут**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
|
||
|
||
## Запобігання <a href="#why-not-restrict-extension-privileges" id="why-not-restrict-extension-privileges"></a>
|
||
|
||
Політика розробника Google чітко забороняє розширенням запитувати більше привілеїв, ніж необхідно для їх функціональності, ефективно зменшуючи надмірні запити на дозволи. Прикладом, коли браузерне розширення перевищило цю межу, стало його розповсюдження разом з самим браузером, а не через магазин доповнень.
|
||
|
||
Браузери можуть ще більше обмежити зловживання привілеями розширення. Наприклад, API [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) та [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) Chrome, які використовуються для запису екрану, розроблені для мінімізації зловживань. API tabCapture може бути активовано лише через безпосередню взаємодію користувача, таку як натискання на значок розширення, тоді як desktopCapture вимагає підтвердження користувача для запису вікна, запобігаючи таємним записам.
|
||
|
||
Проте, посилення заходів безпеки часто призводить до зниження гнучкості та зручності використання розширень. Дозвіл [activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab\_permission) ілюструє цю компроміс. Він був введений, щоб усунути необхідність для розширень запитувати привілеї хостів по всьому інтернету, дозволяючи розширенням отримувати доступ лише до поточної вкладки за явною активацією користувача. Ця модель ефективна для розширень, які потребують дій, ініційованих користувачем, але не підходить для тих, які потребують автоматичних або превентивних дій, тим самим компрометуючи зручність та миттєву реакцію.
|
||
|
||
## **Посилання**
|
||
|
||
* [https://palant.info/2022/08/17/impact-of-extension-privileges/](https://palant.info/2022/08/17/impact-of-extension-privileges/)
|
||
* [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
|
||
|
||
{% hint style="success" %}
|
||
Вчіться та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Вчіться та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Підтримати HackTricks</summary>
|
||
|
||
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
|
||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
|
||
|
||
</details>
|
||
{% endhint %}
|