BrowExt - permissions & host_permissions

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

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ęć fizyczna):

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 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 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 API takich jak cookies, webRequest i tabs.

Następujące host_permissions zasadniczo pozwalają na każdą witrynę:

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

To są hosty, do których rozszerzenie przeglądarki może uzyskać swobodny dostęp. Dzieje się tak dlatego, że 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 również odblokowują "zaawansowane" funkcje API kart. Pozwalają one 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 (oznaczająca adres i tytuł) jest załadowana.

Nie tylko to, słuchacze takie jak tabs.onUpdated stają się również znacznie bardziej użyteczne. Zostaną powiadomieni za każdym razem, gdy nowa strona zostanie załadowana do karty.

Uruchamianie skryptów zawartości

Skrypty zawartości nie muszą być pisane statycznie do manifestu rozszerzenia. Dzięki wystarczającym host_permissions, rozszerzenia mogą również ładować je dynamicznie, wywołując tabs.executeScript() lub scripting.executeScript().

Obie API pozwalają na wykonanie nie tylko plików zawartych w rozszerzeniach jako skrypty zawartości, ale także dowolnego kodu. Pierwsze pozwala na przekazywanie kodu JavaScript jako ciągu znaków, podczas gdy drugie oczekuje funkcji JavaScript, która jest mniej podatna na podatności na wstrzykiwanie. Niemniej jednak oba API spowodują spustoszenie w przypadku niewłaściwego użycia.

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 ich nadużycia to wstrzykiwanie 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.

Impliityczne uprawnienia

Niektóre uprawnienia rozszerzenia nie muszą być wyraźnie deklarowane. Przykładem jest API kart: jego podstawowa funkcjonalność jest dostępna bez żadnych uprawnień. Dowolne 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 nieszkodliwie? API tabs.create() jest nieco mniej nieszkodliwe. Może być używane do utworzenia nowej karty, zasadniczo to samo co 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.

Rozszerzenie może tworzyć dowolną liczbę kart w dowolnym momencie.

Jeśli przejrzysz możliwe parametry tabs.create(), zauważysz również, że jego możliwości wykraczają daleko poza to, co window.open() ma prawo kontrolować. I podczas gdy Firefox nie zezwala na użycie adresów data: URI z tym API, Chrome nie ma takiej ochrony. Użycie takich URI na najwyższym poziomie zostało zakazane z powodu nadużyć phishingowych.

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 twojej kamery internetowej (narzędzia do wideokonferencji) lub lokalizacji geograficznej (mapy). To funkcje z dużym potencjałem nadużycia, dlatego użytkownicy muszą za każdym razem potwierdzać, czy nadal tego chcą.

Nie w przypadku rozszerzeń przeglądarki. Jeśli rozszerzenie przeglądarki chce uzyskać dostęp do twojej kamery internetowej lub mikrofonu, musi poprosić o zgodę tylko raz

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 lub zawartości schowka, udzielenie zgody jest całkowicie zbędne. Rozszerzenie po prostu dodaje geolocation lub clipboard do wpisu uprawnień swojego manifestu. Te uprawnienia dostępu są udzielane wówczas 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 twojej wiedzy.

Dodanie słowa kluczowego history do wpisu uprawnień manifestu rozszerzenia udziela dostępu 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 ono odczytywanie wszystkich zakładek za pomocą API zakładek.

Uprawnienie do przechowywania

Przechowywanie rozszerzenia to zbiór kluczy i wartości, bardzo podobny do 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 zażądać tutaj oraz pełną listę dla rozszerzeń Firefox tutaj.

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 i desktopCapture Chrome'a, 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 ikony 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 ilustruje ten kompromis. Zostało wprowadzone, aby wyeliminować konieczność żądania uprawnień hosta w całym internecie, 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, kompromitując wygodę i natychmiastową reakcję.

Odnośniki

Zacznij od zera i zostań mistrzem hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated