hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md
2024-02-11 01:46:25 +00:00

120 lines
12 KiB
Markdown

# BrowExt - uprawnienia i host\_permissions
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Podstawowe informacje
### **`permissions`**
Uprawnienia są określane w pliku **`manifest.json`** rozszerzenia za pomocą właściwości **`permissions`** i umożliwiają dostęp do prawie wszystkiego, do czego przeglądarka ma dostęp (ciasteczka lub pamięć fizyczną):
Poprzedni manifest deklaruje, że rozszerzenie wymaga uprawnienia `storage`. Oznacza to, że może korzystać z [API pamięci](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage), aby przechowywać swoje dane trwale. W przeciwieństwie do ciasteczek lub interfejsów `localStorage`, które dają użytkownikom pewien poziom kontroli, **pamięć rozszerzenia można zazwyczaj wyczyścić tylko poprzez odinstalowanie rozszerzenia**.
Rozszerzenie będzie prosić o uprawnienia wskazane w pliku **`manifest.json`**, a po zainstalowaniu rozszerzenia zawsze możesz **sprawdzić jego uprawnienia w przeglądarce**, jak pokazano na tym obrazku:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
Możesz znaleźć [**pełną listę uprawnień, które rozszerzenie przeglądarki Chromium może żądać tutaj**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) oraz [**pełną listę dla rozszerzeń Firefox tutaj**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
### `host_permissions`
Opcjonalne, ale potężne ustawienie **`host_permissions`** wskazuje, z którymi hostami rozszerzenie będzie mogło współdziałać za pomocą interfejsów takich jak [`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) i [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
Następujące `host_permissions` pozwalają praktycznie na interakcję z każdą stroną internetową:
```json
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
```
Oto hosty, do których rozszerzenie przeglądarki ma swobodny dostęp. Dzieje się tak, ponieważ gdy rozszerzenie przeglądarki wywołuje **`fetch("https://gmail.com/")`**, nie jest ograniczone przez CORS.
## Nadużywanie `permissions` i `host_permissions`
### Karty
Ponadto, **`host_permissions`** odblokowują również "zaawansowane" [**funkcjonalności API kart**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Pozwalają rozszerzeniu na wywołanie [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) i nie tylko otrzymać **listę kart przeglądarki użytkownika**, ale także dowiedzieć się, która **strona internetowa (adres i tytuł) jest załadowana**.
{% hint style="danger" %}
Nie tylko to, słuchacze takie jak [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **stają się również znacznie bardziej przydatne**. Zostaną powiadomieni, gdy nowa strona zostanie załadowana do karty.
{% endhint %}
### Wykonywanie skryptów treści <a href="#running-content-scripts" id="running-content-scripts"></a>
Skrypty treści nie muszą być pisane statycznie w manifeście rozszerzenia. Dzięki wystarczającym **`host_permissions`**, rozszerzenia mogą również ładować je dynamicznie, wywołując [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **lub** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript).
Obie API umożliwiają wykonanie nie tylko plików zawartych w rozszerzeniach jako skrypty treści, ale także **dowolnego kodu**. Pierwsze z nich umożliwia przekazywanie kodu JavaScript jako ciągu znaków, podczas gdy drugie oczekuje funkcji JavaScript, która jest mniej podatna na podatności związane z wstrzykiwaniem. Jednak oba API mogą wyrządzić szkody, jeśli są niewłaściwie używane.
{% hint style="danger" %}
Oprócz powyższych możliwości, skrypty treści mogą na przykład **przechwytywać dane uwierzytelniające**, gdy są wprowadzane na strony internetowe. Inny klasyczny sposób ich nadużycia to **wstrzykiwanie reklam** na każdej stronie internetowej. Możliwe jest również dodawanie **fałszywych wiadomości** w celu nadużycia wiarygodności stron informacyjnych. Wreszcie, mogą **manipulować stronami bankowymi**, przekierowując transfery pieniężne.
{% endhint %}
### Niejawne uprawnienia <a href="#implicit-privileges" id="implicit-privileges"></a>
Niektóre uprawnienia rozszerzeń **nie muszą być jawnie deklarowane**. Przykładem jest [API kart](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): jego podstawowa funkcjonalność jest dostępna bez żadnych uprawnień. Każde rozszerzenie może otrzymać powiadomienie, gdy otwierasz i zamykasz karty, po prostu nie będzie wiedziało, które strony internetowe odpowiadają tym kartom.
Brzmi zbyt niewinnie? [API tabs.create()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) jest nieco mniej niewinne. Może być używane do **tworzenia nowej karty**, co jest praktycznie tożsame z [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open), które może być wywoływane przez dowolną stronę internetową. Jednak podczas gdy `window.open()` podlega **blokadzie wyskakujących okienek, `tabs.create()` nie**.
{% hint style="danger" %}
Rozszerzenie może tworzyć dowolną liczbę kart w dowolnym momencie.
{% endhint %}
Jeśli przejrzysz możliwe parametry `tabs.create()`, zauważysz również, że jego możliwości wykraczają daleko poza to, co `window.open()` może kontrolować. I podczas gdy Firefox nie zezwala na użycie URI `data:` z tym API, Chrome nie ma takiej ochrony. **Użycie takich URI na najwyższym poziomie zostało** [**zakazane ze względu na nadużycie w celu phishingu**](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) jest bardzo podobne do `tabs.create()`, ale **modyfikuje istniejącą kartę**. Złośliwe rozszerzenie może na przykład dowolnie ładować stronę reklamową do jednej z twoich kart i aktywować tę kartę.
### Kamera internetowa, geolokalizacja i inne <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
Prawdopodobnie wiesz, że strony internetowe mogą prosić o specjalne uprawnienia, na przykład dostęp do kamery internetowej (narzędzia do wideokonferencji) lub lokalizacji geograficznej (mapy). Są to funkcje z dużym potencjałem nadużycia, dlatego użytkownicy muszą za każdym razem potwierdzać, czy nadal tego chcą.
{% hint style="danger" %}
Nie dotyczy to jednak rozszerzeń przeglądarki. **Jeśli rozszerzenie przeglądarki** [**chce uzyskać dostęp do twojej kamery internetowej lub mikrofonu**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, musi poprosić o zgodę tylko raz**
{% endhint %}
Zazwyczaj rozszerzenie robi to od razu po zainstalowaniu. Po zaakceptowaniu tego monitu, **dostęp do kamery internetowej jest możliwy w dowolnym momencie**, nawet jeśli użytkownik nie korzysta w tym momencie z rozszerzenia. Tak, użytkownik zaakceptuje ten monit tylko wtedy, gdy rozszerzenie rzeczywiście potrzebuje dostępu do kamery internetowej. Ale potem musi zaufać rozszerzeniu, że nie będzie nagrywać niczego potajemnie.
Z dostępem do [twojej dokładnej lokalizacji geograficznej](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) lub [zawartości schowka](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), nie jest konieczne udzielanie wyraźnej zgody. **Rozszerzenie po prostu dodaje `geolocation` lub `clipboard` do** [**wpisu uprawnień**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **w swoim manifeście**. Te uprawnienia dostępu są udzielane domyślnie podczas instalacji rozszerzenia. Złośliwe lub skompromitowane rozszerzenie z tymi uprawnieniami może tworzyć twój profil ruchu lub monitorować schowek w poszukiwaniu skopiowanych haseł, bez żebyś cokolwiek zauważył.
Dodanie słowa kluczowego **`history`** do [wpisu uprawnień](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) w manifeście rozszerzenia umożliwia **dostęp do** [**API historii**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Pozwala to na pobranie całej historii przeglądania użytkownika od razu, bez oczekiwania, aż użytkownik odwiedzi te strony internetowe ponownie.
**Uprawnienie `bookmarks`** ma podobny potencjał nadużycia, umożliwia **odczytanie wszystkich zakł
## **Odnośniki**
* [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)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
</details>