hacktricks/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md

112 lines
11 KiB
Markdown

# BrowExt - dozvole & host_permissions
{{#include ../../banners/hacktricks-training.md}}
## Osnovne informacije
### **`permissions`**
Dozvole su definisane u **`manifest.json`** datoteci ekstenzije koristeći **`permissions`** svojstvo i omogućavaju pristup gotovo svemu što pretraživač može da pristupi (Kolačići ili Fizička pohrana):
Prethodni manifest obaveštava da ekstenzija zahteva `storage` dozvolu. To znači da može koristiti [API za skladištenje](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) za trajno čuvanje svojih podataka. Za razliku od kolačića ili `localStorage` API-ja koji korisnicima daju određeni nivo kontrole, **skladištenje ekstenzije se obično može obrisati samo deinstaliranjem ekstenzije**.
Ekstenzija će zatražiti dozvole navedene u svojoj **`manifest.json`** datoteci, a nakon instalacije ekstenzije, možete **uvek proveriti njene dozvole u svom pretraživaču**, kao što je prikazano na ovoj slici:
<figure><img src="../../images/image (18).png" alt=""><figcaption></figcaption></figure>
Možete pronaći [**potpunu listu dozvola koje Chromium Browser Extension može zatražiti ovde**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) i [**potpunu listu za Firefox ekstenzije ovde**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.**
### `host_permissions`
Opcionalna, ali moćna postavka **`host_permissions`** označava sa kojim hostovima će ekstenzija moći da interaguje putem API-ja kao što su [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest), i [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
Sledeće `host_permissions` u suštini omogućavaju svaki web:
```json
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
```
Ovo su hostovi kojima ekstenzija pregledača može slobodno pristupiti. To je zato što kada ekstenzija pregledača pozove **`fetch("https://gmail.com/")`**, nije ograničena CORS-om.
## Zloupotreba `permissions` i `host_permissions`
### Kartice
Pored toga, **`host_permissions`** takođe otključava “naprednu” [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **funkcionalnost.** Omogućavaju ekstenziji da pozove [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) i ne samo da dobije **listu kartica pregledača korisnika** nazad, već i da sazna koja **web stranica (što znači adresa i naslov) je učitana**.
> [!CAUTION]
> Ne samo to, slušaoci poput [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **postaju mnogo korisniji.** Biće obavešteni svaki put kada se nova stranica učita u karticu.
### Pokretanje sadržajnih skripti <a href="#running-content-scripts" id="running-content-scripts"></a>
Sadržajne skripte nisu nužno napisane statički u manifestu ekstenzije. Uz dovoljno **`host_permissions`**, **ekstenzije mogu takođe dinamički učitati skripte pozivajući** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **ili** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript).
Oba API-ja omogućavaju izvršavanje ne samo datoteka sadržanih u ekstenzijama kao sadržajnih skripti, već i **arbitrarnih kodova**. Prvi omogućava prosleđivanje JavaScript koda kao stringa, dok drugi očekuje JavaScript funkciju koja je manje podložna ranjivostima od injekcija. Ipak, oba API-ja će napraviti haos ako se zloupotrebe.
> [!CAUTION]
> Pored gore navedenih mogućnosti, sadržajne skripte mogu na primer **presresti kredencijale** dok se unose na web stranicama. Još jedan klasičan način zloupotrebe je **ubacivanje reklama** na svakoj web stranici. Dodavanje **prevarantskih poruka** za zloupotrebu kredibiliteta vesti takođe je moguće. Na kraju, mogu **manipulisati bankarskim** web stranicama kako bi preusmerili novčane transfere.
### Implicitne privilegije <a href="#implicit-privileges" id="implicit-privileges"></a>
Neke privilegije ekstenzije **ne moraju biti eksplicitno deklarisane**. Jedan primer je [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): njena osnovna funkcionalnost je dostupna bez ikakvih privilegija. Svaka ekstenzija može biti obaveštena kada otvorite i zatvorite kartice, samo neće znati sa kojom web stranicom te kartice odgovaraju.
Zvuči previše bezopasno? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) je donekle manje tako. Može se koristiti za **kreiranje nove kartice**, suštinski isto kao [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) koji može pozvati svaka web stranica. Ipak, dok je `window.open()` podložan **blokatoru iskačućih prozora, `tabs.create()` nije**.
> [!CAUTION]
> Ekstenzija može kreirati bilo koji broj kartica kad god želi.
Ako pogledate moguće `tabs.create()` parametre, takođe ćete primetiti da njene mogućnosti daleko prevazilaze ono što `window.open()` može kontrolisati. I dok Firefox ne dozvoljava korišćenje `data:` URI sa ovim API-jem, Chrome nema takvu zaštitu. **Korišćenje takvih URI na najvišem nivou je** [**zabranjeno zbog zloupotrebe za phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.**
[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) je vrlo sličan `tabs.create()`, ali će **modifikovati postojeću karticu**. Tako zla ekstenzija može na primer proizvoljno učitati stranicu sa reklamama u jednu od vaših kartica, i može aktivirati odgovarajuću karticu.
### Webcam, geolokacija i prijatelji <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
Verovatno znate da web stranice mogu tražiti posebne dozvole, npr. da pristupe vašoj web kameri (alatke za video konferencije) ili geografskoj lokaciji (mape). To su funkcije sa značajnim potencijalom za zloupotrebu, tako da korisnici svaki put moraju potvrditi da i dalje žele to.
> [!CAUTION]
> Ne tako sa ekstenzijama pregledača. **Ako ekstenzija pregledača** [**želi pristup vašoj web kameri ili mikrofonu**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, samo treba da zatraži dozvolu jednom**
Obično, ekstenzija to čini odmah nakon instalacije. Kada se ova poruka prihvati, **pristup web kameri je moguć u bilo kojem trenutku**, čak i ako korisnik u tom trenutku ne interaguje sa ekstenzijom. Da, korisnik će prihvatiti ovu poruku samo ako ekstenzija zaista treba pristup web kameri. Ali nakon toga moraju verovati ekstenziji da neće tajno snimati ništa.
Sa pristupom [vašoj tačnoj geografskoj lokaciji](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) ili [sadržaju vašeg clipboard-a](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), eksplicitno davanje dozvole nije uopšte potrebno. **Ekstenzija jednostavno dodaje `geolocation` ili `clipboard` u** [**permissions entry**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **njegovog manifesta**. Ove privilegije pristupa se zatim implicitno dodeljuju kada se ekstenzija instalira. Tako zla ili kompromitovana ekstenzija sa ovim privilegijama može stvoriti vaš profil kretanja ili pratiti vaš clipboard za kopirane lozinke bez da primetite bilo šta.
Dodavanje **`history`** ključne reči u [permissions entry](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) manifesta ekstenzije dodeljuje **pristup** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Omogućava preuzimanje celokupne istorije pretraživanja korisnika odjednom, bez čekanja da korisnik ponovo poseti te web stranice.
Dozvola **`bookmarks`** ima sličan potencijal za zloupotrebu, ova dozvola omogućava **čitati sve oznake putem** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
### Dozvola za skladištenje <a href="#the-storage-permission" id="the-storage-permission"></a>
Skladištenje ekstenzije je samo kolekcija ključ-vrednost, vrlo slična [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) koju bi svaka web stranica mogla koristiti. Tako da ovde ne bi trebalo da se čuvaju osetljive informacije.
Međutim, reklamne kompanije takođe mogu zloupotrebiti ovo skladište.
### Više dozvola
Možete pronaći [**potpunu listu dozvola koje Chromium Browser Extension može zatražiti ovde**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) i [**potpunu listu za Firefox ekstenzije ovde**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.**
## Prevencija <a href="#why-not-restrict-extension-privileges" id="why-not-restrict-extension-privileges"></a>
Politika Google-ovih developera izričito zabranjuje ekstenzijama da traže više privilegija nego što je potrebno za njihovu funkcionalnost, efikasno smanjujući prekomerne zahteve za dozvolama. Jedan primer gde je ekstenzija pregledača prešla ovu granicu uključivao je njenu distribuciju sa samim pregledačem umesto kroz prodavnicu dodataka.
Pregledači bi mogli dalje ograničiti zloupotrebu privilegija ekstenzija. Na primer, Chrome-ovi [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) i [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) API, korišćeni za snimanje ekrana, dizajnirani su da minimiziraju zloupotrebu. tabCapture API može se aktivirati samo kroz direktnu interakciju korisnika, kao što je klik na ikonu ekstenzije, dok desktopCapture zahteva potvrdu korisnika za prozor koji treba snimiti, sprečavajući tajne aktivnosti snimanja.
Međutim, pooštravanje mera bezbednosti često rezultira smanjenjem fleksibilnosti i korisničke prijateljskosti ekstenzija. [activeTab permission](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) ilustruje ovu razmenu. Uvedena je da eliminiše potrebu za ekstenzijama da traže privilegije hosta širom interneta, omogućavajući ekstenzijama da pristupaju samo trenutnoj kartici po eksplicitnoj aktivaciji od strane korisnika. Ovaj model je efikasan za ekstenzije koje zahtevaju akcije inicirane od strane korisnika, ali nije dovoljan za one koje zahtevaju automatske ili preventivne akcije, čime se kompromituje pogodnost i trenutna reakcija.
## **Reference**
- [https://palant.info/2022/08/17/impact-of-extension-privileges/](https://palant.info/2022/08/17/impact-of-extension-privileges/)
- [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
{{#include ../../banners/hacktricks-training.md}}