12 KiB
BrowExt - uprawnienia i host_permissions
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (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ź PLAN SUBSKRYPCYJNY!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
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, 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:
Możesz znaleźć pełną listę uprawnień, które rozszerzenie przeglądarki Chromium może żądać tutaj oraz pełną listę dla rozszerzeń Firefox tutaj.
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
, webRequest
i tabs
.
Następujące host_permissions
pozwalają praktycznie na interakcję z każdą stroną internetową:
"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. Pozwalają rozszerzeniu na wywołanie 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 stają się również znacznie bardziej przydatne. Zostaną powiadomieni, gdy nowa strona zostanie załadowana do karty. {% endhint %}
Wykonywanie skryptów treści
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() lub 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
Niektóre uprawnienia rozszerzeń nie muszą być jawnie deklarowane. Przykładem jest API kart: 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() jest nieco mniej niewinne. Może być używane do tworzenia nowej karty, co jest praktycznie tożsame z 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.
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
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, 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 lub zawartości schowka, nie jest konieczne udzielanie wyraźnej zgody. Rozszerzenie po prostu dodaje geolocation
lub clipboard
do wpisu uprawnień 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ń w manifeście rozszerzenia umożliwia dostęp do API historii. 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://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
Naucz się hakować AWS od zera do bohatera z htARTE (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ź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.