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

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:

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

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: