13 KiB
BrowExt - permissions & host_permissions
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Basic Information
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 pohranu za trajno čuvanje svojih podataka. Za razliku od kolačića ili localStorage
API-ja koji korisnicima daju određeni nivo kontrole, pohrana 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:
Možete pronaći potpunu listu dozvola koje Chromium Browser Extension može zatražiti ovde i potpunu listu za Firefox ekstenzije ovde.
host_permissions
Opciona, ali moćna postavka host_permissions
označava sa kojim hostovima će ekstenzija moći da komunicira putem API-ja kao što su cookies
, webRequest
, i tabs
.
Sledeće host_permissions
u suštini omogućavaju svaki web:
"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
Tabs
Pored toga, host_permissions
takođe otključava “naprednu” tabs API funkcionalnost. Omogućavaju ekstenziji da pozove tabs.query() i ne samo da dobije listu korisnikovih kartica pregledača nazad, već i da sazna koja web stranica (što znači adresa i naslov) je učitana.
{% hint style="danger" %} Ne samo to, slušaoci poput tabs.onUpdated postaju mnogo korisniji. Biće obavešteni svaki put kada se nova stranica učita u karticu. {% endhint %}
Pokretanje sadržajnih skripti
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() ili 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.
{% hint style="danger" %} Pored mogućnosti navedenih iznad, 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 prevara za zloupotrebu kredibiliteta vesti takođe je moguće. Na kraju, mogu manipulisati bankarskim web stranicama kako bi preusmerili novčane transfere. {% endhint %}
Implicitne privilegije
Neke privilegije ekstenzije ne moraju biti eksplicitno deklarisane. Jedan primer je tabs API: njena osnovna funkcionalnost je dostupna bez ikakvih privilegija. Svaka ekstenzija može biti obaveštena kada otvorite i zatvorite kartice, samo neće znati kojoj web stranici te kartice odgovaraju.
Zvuči previše bezopasno? tabs.create() API je donekle manje tako. Može se koristiti za kreiranje nove kartice, suštinski isto kao window.open() koji može pozvati svaka web stranica. Ipak, dok je window.open()
podložan blokatoru iskačućih prozora, tabs.create()
nije.
{% hint style="danger" %} Ekstenzija može kreirati bilo koji broj kartica kad god želi. {% endhint %}
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.
tabs.update() je vrlo sličan tabs.create()
, ali će modifikovati postojeću karticu. Tako može zla ekstenzija 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
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 to još uvek žele.
{% hint style="danger" %} Ne tako sa ekstenzijama pregledača. Ako ekstenzija pregledača želi pristup vašoj web kameri ili mikrofonu, potrebno je da zatraži dozvolu samo jednom {% endhint %}
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 ili sadržaju vašeg clipboard-a, eksplicitno davanje dozvole je potpuno nepotrebno. Ekstenzija jednostavno dodaje geolocation
ili clipboard
u permissions entry svojeg 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 manifesta ekstenzije dodeljuje pristup history API. Omogućava preuzimanje celokupne istorije pretraživanja korisnika odjednom, bez čekanja da korisnik ponovo poseti te web stranice.
bookmarks
dozvola ima sličan potencijal za zloupotrebu, ova dozvola omogućava čitanje svih oznaka putem bookmarks API.
Dozvola za skladištenje
Skladištenje ekstenzije je samo kolekcija ključ-vrednost, vrlo slična 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 i potpunu listu za Firefox ekstenzije ovde.
Prevencija
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. Primer gde je ekstenzija pregledača prešla ovu granicu uključivao je njenu distribuciju sa samim pregledačem umesto putem prodavnice dodataka.
Pregledači bi mogli dalje ograničiti zloupotrebu privilegija ekstenzija. Na primer, Chrome-ovi tabCapture i 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 dozvola ilustruje ovu trgovinu. Uvedena je da eliminiše potrebu za ekstenzijama da traže privilegije hosta širom interneta, omogućavajući ekstenzijama da pristupaju samo trenutnoj kartici na eksplicitnu aktivaciju 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://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.