14 KiB
BrowExt - dozvole i host_dozvole
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili da preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRIJAVU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte Porodicu PEASS, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
dozvole
Dozvole se definišu u manifest.json
fajlu proširenja koristeći svojstvo permissions
i omogućavaju pristup skoro svemu čemu browser može da pristupi (kolačići ili fizičko skladište):
Prethodni manifest deklariše da proširenje zahteva dozvolu storage
. Ovo znači da može koristiti API za skladištenje da trajno čuva svoje podatke. Za razliku od kolačića ili localStorage
API-ja koji daju korisnicima određeni nivo kontrole, skladište proširenja obično može biti očišćeno samo deinstaliranjem proširenja.
Proširenje će zatražiti dozvole navedene u svom manifest.json
fajlu i Nakon instaliranja proširenja, uvek možete proveriti njegove dozvole u svom browseru, kao što je prikazano na ovoj slici:
Možete pronaći kompletan spisak dozvola koje Chromium Browser Extension može zatražiti ovde i kompletan spisak za Firefox ekstenzije ovde.
host_permissions
Opciono, ali moćno podešavanje host_permissions
ukazuje sa kojim domenima će proširenje moći da interaguje putem API-ja kao što su cookies
, webRequest
i tabs
.
Sledeće host_permissions
praktično dozvoljavaju svakom veb sajtu:
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
Ovo su domaćini kojima proširenje pregledača može slobodno pristupiti. To je zato što kada proširenje pregledača pozove fetch("https://gmail.com/")
nije ograničeno od strane CORS-a.
Zloupotreba permissions
i host_permissions
Tabovi
Osim toga, host_permissions
takođe otključavaju "napredne" tabs API funkcionalnosti. Dozvoljavaju proširenju da pozove tabs.query() i ne samo da dobije listu tabova korisnika već i sazna koje web stranice (znači adresu i naslov) su učitane.
{% hint style="danger" %} Nije samo to, slušači poput tabs.onUpdated takođe postaju mnogo korisniji. Biće obavešteni svaki put kada se nova stranica učita u tab. {% endhint %}
Pokretanje skripti sadržaja
Skripte sadržaja nisu nužno statički napisane u manifestu proširenja. Sa dovoljnim host_permissions
, proširenja takođe mogu da ih dinamički učitaju pozivajući tabs.executeScript() ili scripting.executeScript().
Oba API-ja omogućavaju izvršavanje ne samo datoteka sadržanih u proširenjima kao skripte sadržaja već i proizvoljnog koda. Prvi omogućava prosleđivanje JavaScript koda kao string dok drugi očekuje JavaScript funkciju koja je manje podložna ranjivostima ubacivanja. Ipak, oba API-ja će napraviti haos ako se zloupotrebe.
{% hint style="danger" %} Pored gore navedenih mogućnosti, skripte sadržaja na primer mogu interceptovati akreditive dok se unose na web stranice. Još jedan klasičan način zloupotrebe je ubacivanje reklama na svaku web lokaciju. Dodavanje prevara poruka za zloupotrebu kredibiliteta vesti je takođe moguće. Na kraju, mogu manipulisati bankarskim web lokacijama da preusmere novčane transfere. {% endhint %}
Implicitne privilegije
Neki privilegije proširenja ne moraju biti eksplicitno deklarisane. Jedan primer je tabs API: njegova osnovna funkcionalnost je dostupna bez ikakvih privilegija. Svako proširenje može biti obavešteno kada otvorite i zatvorite tabove, jednostavno neće znati sa kojom web lokacijom se ti tabovi odnose.
Zvuči previše bezopasno? tabs.create() API je nešto manje bezopasan. Može se koristiti za kreiranje novog taba, suštinski isto kao window.open() koji može biti pozvan od strane bilo koje web lokacije. Ipak, dok je window.open()
podložan blokatoru iskačućih prozora, tabs.create()
nije.
{% hint style="danger" %} Proširenje može kreirati bilo koji broj tabova kada god želi. {% endhint %}
Ako pogledate moguće parametre tabs.create()
, primetićete da njegove mogućnosti idu daleko iznad onoga što je window.open()
dozvoljeno da kontroliše. I dok Firefox ne dozvoljava korišćenje data:
URI-ja sa ovim API-jem, Chrome nema takvu zaštitu. Korišćenje takvih URI-ja na vrhunskom nivou je zabranjeno zbog zloupotrebe za ribarenje.
tabs.update() je vrlo sličan tabs.create()
ali će modifikovati postojeći tab. Dakle, zlonamerno proširenje na primer može proizvoljno učitati stranicu sa reklamama u jedan od vaših tabova, i može takođe aktivirati odgovarajući tab.
Veb kamera, geolokacija i prijatelji
Verovatno znate da web lokacije mogu zatražiti posebne dozvole, na primer za pristup vašoj veb kameri (alati za video konferencije) ili geografskoj lokaciji (mapi). To su funkcije sa značajnim potencijalom za zloupotrebu, tako da korisnici svaki put moraju potvrditi da li to i dalje žele.
{% hint style="danger" %} Nije tako sa proširenjima pregledača. Ako proširenje pregledača želi pristup vašoj veb kameri ili mikrofonu, potrebno je samo jednom zatražiti dozvolu {% endhint %}
Tipično, proširenje će to učiniti odmah nakon instalacije. Nakon što se ovaj dijalog prihvati, pristup veb kameri je moguć u bilo koje vreme, čak i ako korisnik u tom trenutku ne interaguje sa proširenjem. Da, korisnik će prihvatiti ovaj dijalog samo ako proširenje zaista treba pristup veb kameri. Ali nakon toga moraju da veruju proširenju da ne snima ništa tajno.
Sa pristupom vašoj tačnoj geografskoj lokaciji ili sadržaju vašeg clipboard-a, eksplicitno odobravanje dozvole nije potrebno uopšte. Proširenje jednostavno dodaje geolocation
ili clipboard
u unos dozvola svog manifesta. Ove privilegije pristupa se zatim implicitno dodeljuju prilikom instalacije proširenja. Dakle, zlonamerno ili kompromitovano proširenje sa ovim privilegijama može kreirati vaš profil kretanja ili pratiti vaš clipboard za kopirane lozinke bez da primetite bilo šta.
Dodavanje ključne reči history
u unos dozvola manifesta proširenja omogućava pristup history API. To omogućava dobijanje celokupne istorije pregledanja korisnika odjednom, bez čekanja da korisnik ponovo poseti ove web lokacije.
Dozvola za bookmarks
ima sličan potencijal za zloupotrebu, ova dozvola omogućava čitanje svih obeleživača putem bookmarks API.
Dozvola za skladištenje
Skladište proširenja je samo kolekcija ključ-vrednost, vrlo slično localStorage-u koji bi mogla koristiti bilo koja web lokacija. Dakle, ovde ne bi trebale biti čuvane osetljive informacije.
Međutim, kompanije za oglašavanje takođe mogu zloupotrebiti ovo skladište.
Više dozvola
Možete pronaći kompletan spisak dozvola koje Chromium Browser Extension može zatražiti ovde i kompletan spisak za Firefox proširenja ovde.
Prevencija
Politika Google-ovog razvojnog tima eksplicitno zabranjuje proširenjima da traže više privilegija nego što je potrebno za njihovu funkcionalnost, efikasno umanjujući prekomerne zahteve za dozvolama. Primer gde je proširenje pregledača prekoračilo ovu granicu uključivao je njegovu distribuciju sa samim pregledačem umesto preko prodavnice dodataka.
Pregledači bi mogli dalje ograničiti zloupotrebu privilegija proširenja. Na primer, Chrome-ovi tabCapture i desktopCapture API-ji, korišćeni za snimanje ekrana, dizajnirani su da minimiziraju zloupotrebu. TabCapture API može biti aktiviran samo kroz direktnu interakciju korisnika, kao što je klik na ikonu proširenja, dok desktopCapture zahteva potvrdu korisnika da bi prozor bio snimljen, sprečavajući tajno snimanje aktivnosti.
Međutim, pooštravanje mera bezbednosti često rezultira smanjenom fleksibilnošću i korisničkom prijateljskošću proširenja. activeTab dozvola ilustruje ovu kompromis. Uvedena je kako bi se eliminisala potreba za proširenjima da traže privilegije domaćina širom interneta, omogućavajući proširenjima pristup samo trenutnom tabu nakon eksplicitne aktivacije od strane korisnika. Ovaj model je efikasan za proširenja koja zahtevaju akcije inicirane od strane korisnika, ali nije dovoljan za ona koja zahtevaju automatske ili preventivne akcije, time kompromitujući praktičnost i trenutnu odzivnost.
Reference
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili da preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRIJAVU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.