BrowExt - permissions & host_permissions
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
permissions
Uprawnienia są definiowane w pliku manifest.json
rozszerzenia za pomocą właściwości permissions
i pozwalają na dostęp do prawie wszystkiego, do czego może uzyskać dostęp przeglądarka (ciasteczka lub fizyczne przechowywanie):
Poprzedni manifest deklaruje, że rozszerzenie wymaga uprawnienia storage
. Oznacza to, że może używać API storage do trwałego przechowywania swoich danych. W przeciwieństwie do ciasteczek lub API localStorage
, które dają użytkownikom pewien poziom kontroli, przechowywanie w rozszerzeniu można zazwyczaj wyczyścić tylko przez odinstalowanie rozszerzenia.
Rozszerzenie poprosi o uprawnienia wskazane w jego pliku manifest.json
i po zainstalowaniu rozszerzenia, możesz zawsze sprawdzić jego uprawnienia w swojej przeglądarce, jak pokazano na tym obrazie:
Możesz znaleźć pełną listę uprawnień, o które może prosić rozszerzenie przeglądarki Chromium 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 wchodzić w interakcje za pomocą API, takich jak cookies
, webRequest
i tabs
.
Następujące host_permissions
zasadniczo pozwalają na dostęp do każdej strony internetowej:
Te 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.
permissions
i host_permissions
Ponadto host_permissions
odblokowuje również „zaawansowaną” funkcjonalność API kart. Umożliwiają one rozszerzeniu wywołanie tabs.query() i nie tylko uzyskanie listy kart przeglądarki użytkownika, ale także dowiedzenie się, która strona internetowa (czyli adres i tytuł) jest załadowana.
Nie tylko to, ale również nasłuchiwacze, tacy jak tabs.onUpdated, stają się znacznie bardziej użyteczni. Będą powiadamiani za każdym razem, gdy nowa strona ładowana jest do karty.
Skrypty treści nie muszą być koniecznie statycznie zapisane w manifeście rozszerzenia. Przy wystarczających host_permissions
, rozszerzenia mogą również ładować je dynamicznie, wywołując tabs.executeScript() lub scripting.executeScript().
Oba API pozwalają na wykonywanie nie tylko plików zawartych w rozszerzeniach jako skryptów treści, ale także dowolnego kodu. Pierwsze pozwala na przekazywanie kodu JavaScript jako ciągu, podczas gdy drugie oczekuje funkcji JavaScript, która jest mniej podatna na luki w zabezpieczeniach związane z wstrzykiwaniem. Mimo to, oba API mogą wyrządzić poważne szkody, jeśli są niewłaściwie używane.
Oprócz powyższych możliwości, skrypty treści mogą na przykład przechwytywać dane uwierzytelniające, gdy są one wprowadzane na stronach internetowych. Innym klasycznym sposobem ich nadużycia jest wstrzykiwanie reklam na każdej stronie internetowej. Możliwe jest również dodawanie wiadomości oszukańczych, aby nadużyć wiarygodności stron informacyjnych. Wreszcie, mogą manipulować stronami bankowymi, aby przekierowywać przelewy.
Niektóre uprawnienia rozszerzenia nie muszą być wyraźnie zadeklarowane. Przykładem jest API kart: jego podstawowa funkcjonalność jest dostępna bez jakichkolwiek uprawnień. Każde rozszerzenie może być powiadamiane, gdy otwierasz i zamykasz karty, po prostu nie będzie wiedziało, z jaką stroną internetową te karty są związane.
Brzmi zbyt nieszkodliwie? API tabs.create() jest nieco mniej takie. Może być używane do tworzenia nowej karty, zasadniczo tak samo jak window.open(), które może być wywoływane przez każdą stronę internetową. Jednak podczas gdy window.open()
podlega blokadzie wyskakujących okienek, tabs.create()
nie podlega.
Rozszerzenie może tworzyć dowolną liczbę kart, kiedy tylko chce.
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 pozwala na używanie URI data:
z tym API, Chrome nie ma takiej ochrony. Użycie takich URI na najwyższym poziomie zostało zakazane z powodu nadużyć związanych z phishingiem.
tabs.update() jest bardzo podobne do tabs.create()
, ale modyfikuje istniejącą kartę. Tak więc złośliwe rozszerzenie może na przykład dowolnie załadować stronę reklamową do jednej z twoich kart i może również aktywować odpowiadającą jej kartę.
Prawdopodobnie wiesz, że strony internetowe mogą żądać specjalnych uprawnień, 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żyć, więc użytkownicy muszą za każdym razem potwierdzać, że nadal chcą tego.
Nie w przypadku rozszerzeń przeglądarki. Jeśli rozszerzenie przeglądarki chce uzyskać dostęp do twojej kamery internetowej lub mikrofonu, musi tylko raz poprosić o pozwolenie
Zazwyczaj rozszerzenie robi to natychmiast po zainstalowaniu. Gdy to powiadomienie zostanie zaakceptowane, dostęp do kamery internetowej jest możliwy w dowolnym momencie, nawet jeśli użytkownik w tym momencie nie wchodzi w interakcję z rozszerzeniem. Tak, użytkownik zaakceptuje to powiadomienie tylko wtedy, gdy rozszerzenie naprawdę potrzebuje dostępu do kamery internetowej. Ale po tym muszą zaufać rozszerzeniu, że nie nagra nic w tajemnicy.
Dzięki dostępowi do twojej dokładnej lokalizacji geograficznej lub zawartości twojego schowka, wyraźne udzielenie pozwolenia jest całkowicie niepotrzebne. Rozszerzenie po prostu dodaje geolocation
lub clipboard
do wpisu uprawnień swojego manifestu. Te uprawnienia dostępu są następnie przyznawane implicitnie, gdy rozszerzenie jest instalowane. Tak więc złośliwe lub skompromitowane rozszerzenie z tymi uprawnieniami może stworzyć twój profil ruchu lub monitorować twój schowek w poszukiwaniu skopiowanych haseł, nie zauważając niczego.
Dodanie słowa kluczowego history
do wpisu uprawnień manifestu rozszerzenia przyznaje dostęp do API historii. Umożliwia to pobranie całej historii przeglądania użytkownika za jednym razem, bez czekania, aż użytkownik ponownie odwiedzi te strony internetowe.
Uprawnienie bookmarks
ma podobny potencjał nadużyć, pozwala na odczytanie wszystkich zakładek za pomocą API zakładek.
Przechowywanie rozszerzenia to jedynie kolekcja klucz-wartość, bardzo podobna do localStorage, której mogłaby używać każda strona internetowa. Dlatego nie powinno się tutaj przechowywać żadnych wrażliwych informacji.
Jednak firmy reklamowe mogą również nadużywać tego przechowywania.
Możesz znaleźć pełną listę uprawnień, które może żądać rozszerzenie przeglądarki Chromium tutaj oraz pełną listę dla rozszerzeń Firefox tutaj.
Polityka dewelopera Google wyraźnie zabrania rozszerzeniom żądania większych uprawnień niż to konieczne do ich funkcjonalności, skutecznie łagodząc nadmierne żądania uprawnień. Przykładem, w którym rozszerzenie przeglądarki przekroczyło tę granicę, było jego dystrybucja z samą przeglądarką, a nie przez sklep z dodatkami.
Przeglądarki mogłyby dodatkowo ograniczyć nadużycia uprawnień rozszerzeń. Na przykład API tabCapture i desktopCapture Chrome, używane do nagrywania ekranu, są zaprojektowane w celu minimalizacji nadużyć. API tabCapture może być aktywowane tylko poprzez bezpośrednią interakcję użytkownika, taką jak kliknięcie na ikonę rozszerzenia, podczas gdy desktopCapture wymaga potwierdzenia użytkownika, aby okno mogło być nagrywane, zapobiegając potajemnym działaniom nagrywającym.
Jednak 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ć potrzebę, aby rozszerzenia żądały uprawnień hosta w całym internecie, pozwalając rozszerzeniom na dostęp tylko do bieżącej karty po wyraźnej aktywacji przez użytkownika. Ten model jest skuteczny dla rozszerzeń wymagających działań inicjowanych przez użytkownika, ale nie sprawdza się w przypadku tych, które wymagają automatycznych lub prewencyjnych działań, co kompromituje wygodę i natychmiastową reakcję.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)