# BrowExt - uprawnienia i host\_permissions
Naucz się hakować AWS od zera do bohatera zhtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](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) na githubie.
## Podstawowe informacje
### **`permissions`**
Uprawnienia są określane w pliku **`manifest.json`** rozszerzenia za pomocą właściwości **`permissions`** i pozwalają na dostęp do praktycznie wszystkiego, do czego może uzyskać dostęp przeglądarka (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 API `localStorage`, które dają użytkownikom pewien poziom kontroli, **pamięć rozszerzenia zazwyczaj można wyczyścić tylko poprzez odinstalowanie rozszerzenia**.
Rozszerzenie będzie prosić o uprawnienia wskazane w swoim pliku **`manifest.json`** i Po zainstalowaniu rozszerzenia, zawsze możesz **sprawdzić jego uprawnienia w przeglądarce**, jak pokazano na tym obrazie:
Możesz znaleźć [**pełną listę uprawnień, które rozszerzenie przeglądarki Chromium może zażą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` zasadniczo pozwalają na każdą stronę internetową:
```json
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
""
]
```
To są hosty, do których rozszerzenie przeglądarki może uzyskać 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" [**API kart**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Pozwalają one rozszerzeniu wywołać [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) i nie tylko otrzymać z powrotem **listę kart przeglądarki użytkownika**, ale także dowiedzieć się, która **strona internetowa (oznaczająca 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 użyteczne**. Zostaną powiadomieni za każdym razem, gdy nowa strona zostanie załadowana do karty.
{% endhint %}
### Uruchamianie skryptów zawartości
Skrypty zawartoś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).
Oba interfejsy API pozwalają na wykonanie nie tylko plików zawartych w rozszerzeniach jako skrypty zawartości, ale także **dowolnego kodu**. Pierwszy pozwala na przekazywanie kodu JavaScript jako ciągu znaków, podczas gdy drugi oczekuje funkcji JavaScript, która jest mniej podatna na podatności związane z wstrzykiwaniem. Niemniej jednak, oba interfejsy API spowodują spustoszenie w przypadku niewłaściwego użycia.
{% hint style="danger" %}
Oprócz powyższych możliwości, skrypty zawartości mogą na przykład **przechwytywać dane uwierzytelniające**, gdy są wprowadzane na strony internetowe. Inny klasyczny sposób nadużycia polega na **wstrzykiwaniu reklam** na każdej stronie internetowej. Dodawanie **oszukańczych wiadomości** w celu nadużycia wiarygodności stron informacyjnych jest również możliwe. Wreszcie, mogą **manipulować stronami bankowymi**, aby przekierować transfery pieniężne.
{% endhint %}
### Impliityczne uprawnienia
Niektóre uprawnienia rozszerzenia **nie muszą być wyraźnie 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 być powiadamiane, gdy otwierasz i zamykasz karty, po prostu nie będzie wiedzieć, z jaką stroną internetową te karty się wiążą.
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 **utworzenia nowej karty**, zasadniczo to samo co [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 **blokerowi wyskakujących okien, `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 może kontrolować `window.open()`. I podczas gdy Firefox nie zezwala na użycie adresów `data:` URI z tym interfejsem API, Chrome nie ma takiej ochrony. **Użycie takich URI na najwyższym poziomie zostało** [**zakazane ze względu na nadużycia 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 **zmodyfikuje istniejącą kartę**. Złośliwe rozszerzenie może na przykład dowolnie załadować stronę z reklamami do jednej z twoich kart i aktywować odpowiednią kartę.
### Kamera internetowa, geolokalizacja i przyjaciele
Prawdopodobnie wiesz, że strony internetowe mogą prosić o specjalne uprawnienia, np. w celu uzyskania dostępu do kamery internetowej (narzędzia do wideokonferencji) lub lokalizacji geograficznej (mapy). Są to funkcje z dużym potencjałem nadużyć, dlatego użytkownicy muszą za każdym razem potwierdzać, czy nadal chcą to zrobić.
{% hint style="danger" %}
Nie w przypadku 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 zrobi to natychmiast 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 naprawdę potrzebuje dostępu do kamery internetowej. Ale potem muszą zaufać rozszerzeniu, że nie będzie nagrywać niczego w tajemnicy.
Dzięki dostępowi 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), udzielenie zgody jest całkowicie zbędne. **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 w sposób domyślny podczas instalacji rozszerzenia. Dlatego złośliwe lub skompromitowane rozszerzenie z tymi uprawnieniami może tworzyć twój profil ruchu lub monitorować schowek w poszukiwaniu skopiowanych haseł bez twojej wiedzy.
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 udziela dostępu 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 konieczności oczekiwania, aż użytkownik odwiedzi te strony internetowe ponownie.
Uprawnienie **`bookmarks`** ma podobny potencjał nadużycia, umożliwia ono **odczytywanie wszystkich zakładek za pomocą** [**API zakładek**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
### Uprawnienie do przechowywania
Przechowywanie rozszerzenia to zbiór kluczy i wartości, bardzo podobny do [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage), którego mogłaby użyć dowolna strona internetowa. Dlatego tutaj nie powinny być przechowywane żadne poufne informacje.
Jednak firmy reklamowe mogą również nadużywać tego przechowywania.
### Więcej uprawnień
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)**.**
## Zapobieganie
Polityka dewelopera Google wyraźnie zabrania rozszerzeniom żądania większej liczby uprawnień niż jest to konieczne dla ich funkcjonalności, skutecznie ograniczając nadmierne żądania uprawnień. Przykładem, gdzie rozszerzenie przeglądarki przekroczyło tę granicę, było jego dystrybuowanie razem z przeglądarką, a nie poprzez sklep z dodatkami.
Przeglądarki mogłyby dalej ograniczyć nadużycia uprawnień rozszerzeń. Na przykład API [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) i [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) w Chrome, używane do nagrywania ekranu, zostały zaprojektowane w taki sposób, aby minimalizować nadużycia. API tabCapture może być aktywowane tylko poprzez bezpośrednią interakcję użytkownika, taką jak kliknięcie w ikonę rozszerzenia, podczas gdy desktopCapture wymaga potwierdzenia użytkownika, aby okno zostało nagrane, zapobiegając tajnemu nagrywaniu działań.
Jednakże, zaostrzenie środków bezpieczeństwa często prowadzi do zmniejszenia elastyczności i przyjazności dla użytkownika rozszerzeń. [Uprawnienie activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab\_permission) ilustruje ten kompromis. Zostało wprowadzone, aby wyeliminować konieczność żądania uprawnień hosta w całym internecie przez rozszerzenia, pozwalając rozszerzeniom uzyskać dostęp tylko do bieżącej karty po wyraźnym aktywowaniu przez użytkownika. Ten model jest skuteczny dla rozszerzeń wymagających działań inicjowanych przez użytkownika, ale nie wystarcza dla tych wymagających działań automatycznych lub prewencyjnych, co kompromituje wygodę i natychmiastową reakcję.
## **Referencje**
* [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)
Zacznij od zera i zostań mistrzem hakowania AWS dziękihtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](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.