BrowExt - permissions & host_permissions

Support HackTricks

Basic Information

permissions

Permissies word in die uitbreiding se manifest.json lêer gedefinieer met die permissions eienskap en laat toegang toe tot byna enigiets wat 'n blaaier kan toegang hê (Koekies of Fisiese Berging):

Die vorige manifest verklaar dat die uitbreiding die storage toestemming benodig. Dit beteken dat dit die berging API kan gebruik om sy data volhoubaar te stoor. Anders as koekies of localStorage API's wat gebruikers 'n sekere vlak van beheer gee, kan uitbreiding berging normaalweg net verwyder word deur die uitbreiding te deïnstalleer.

'n Uitbreiding sal die toestemmings wat in sy manifest.json lêer aangedui word, aanvra en na die installasie van die uitbreiding kan jy altyd sy toestemmings in jou blaaiers nagaan, soos in hierdie beeld getoon:

Jy kan die volledige lys van toestemmings wat 'n Chromium Blaaier Uitbreiding kan aanvra hier vind en 'n volledige lys vir Firefox uitbreidings hier.

host_permissions

Die opsionele maar kragtige instelling host_permissions dui aan met watter gasheer die uitbreiding in staat gaan wees om te kommunikeer via API's soos cookies, webRequest, en tabs.

Die volgende host_permissions laat basies elke web toe:

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

These are the hosts that the browser extension can access freely. This is because when a browser extension calls fetch("https://gmail.com/") it's not restricted by CORS.

Misbruik van permissions en host_permissions

Tabs

Boonop ontgrendel host_permissions ook “gevorderde” tabs API funksionaliteit. Dit laat die uitbreiding toe om tabs.query() aan te roep en nie net 'n lys van die gebruiker se blaaier-oortjies terug te kry nie, maar ook te leer watter webblad (wat adres en titel beteken) gelaai is.

Nie net dit nie, luisteraars soos tabs.onUpdated word ook baie nuttiger. Hierdie sal kennisgewing ontvang wanneer 'n nuwe bladsy in 'n oortjie laai.

Loop inhoudskripte

Inhoudskripte is nie noodwendig staties in die uitbreiding manifest geskryf nie. Gegewe voldoende host_permissions, kan uitbreidings dit ook dinamies laai deur tabs.executeScript() of scripting.executeScript() aan te roep.

Albei API's laat nie net die uitvoering van lêers wat in die uitbreidings as inhoudskripte bevat is toe nie, maar ook arbitraire kode. Die eerste laat die oorgang van JavaScript-kode as 'n string toe terwyl die laaste 'n JavaScript-funksie verwag wat minder geneig is tot insluiting kwesbaarhede. Tog, albei API's sal chaos veroorsaak as dit verkeerd gebruik word.

Benewens die bogenoemde vermoëns, kan inhoudskripte byvoorbeeld akkrediteerbare inligting onderskep soos dit in webblaaie ingevoer word. 'n Ander klassieke manier om dit te misbruik is om advertensies in te spuit op elke webwerf. Dit is ook moontlik om bedrogboodskappe toe te voeg om die geloofwaardigheid van nuuswebwerwe te misbruik. Laastens kan hulle bankwebwerwe manipuleer om geldtransfers te herlei.

Impliciete voorregte

Sommige uitbreiding voorregte hoef nie eksplisiet verklaar te word nie. Een voorbeeld is die tabs API: sy basiese funksionaliteit is toeganklik sonder enige voorregte. Enige uitbreiding kan kennisgewing ontvang wanneer jy oortjies oopmaak en sluit, dit sal net nie weet watter webwerf hierdie oortjies ooreenstem nie.

Klink te onskadelik? Die tabs.create() API is ietwat minder so. Dit kan gebruik word om 'n nuwe oortjie te skep, essensieel dieselfde as window.open() wat deur enige webwerf aangeroep kan word. Tog, terwyl window.open() onderhewig is aan die pop-up blokker, is tabs.create() nie.

'n Uitbreiding kan enige aantal oortjies skep wanneer dit wil.

As jy deur moontlike tabs.create() parameters kyk, sal jy ook opgemerk dat sy vermoëns baie verder strek as wat window.open() toegelaat word om te beheer. En terwyl Firefox nie toelaat dat data: URIs met hierdie API gebruik word nie, het Chrome nie so 'n beskerming nie. Die gebruik van sulke URIs op die boonste vlak is verbied weens misbruik vir phishing.

tabs.update() is baie soortgelyk aan tabs.create() maar sal 'n bestaande oortjie wysig. So kan 'n kwaadwillige uitbreiding byvoorbeeld arbitrêr 'n advertensiebladsy in een van jou oortjies laai, en dit kan ook die ooreenstemmende oortjie aktiveer.

Webcam, geolokasie en vriende

Jy weet waarskynlik dat webwerwe spesiale toestemming kan vra, byvoorbeeld om toegang tot jou webcam (video konferensie gereedskap) of geografiese ligging (kaarte) te verkry. Dit is funksies met aansienlike potensiaal vir misbruik, so gebruikers moet elke keer bevestig dat hulle dit steeds wil hê.

Nie so met blaaiers uitbreidings nie. As 'n blaaiers uitbreiding toegang tot jou webcam of mikrofoon wil hê, hoef dit net een keer toestemming te vra

Tipies sal 'n uitbreiding dit onmiddellik na installasie doen. Sodra hierdie uitnodiging aanvaar word, is toegang tot die webcam te enige tyd moontlik, selfs al interaksie die gebruiker nie met die uitbreiding op hierdie punt nie. Ja, 'n gebruiker sal hierdie uitnodiging net aanvaar as die uitbreiding regtig webcam toegang benodig. Maar daarna moet hulle die uitbreiding vertrou om niks geheim op te neem nie.

Met toegang tot jou presiese geografiese ligging of inhoud van jou klembord, is dit glad nie nodig om toestemming eksplisiet te verleen nie. 'n Uitbreiding voeg eenvoudig geolocation of clipboard by die permissions entry van sy manifest. Hierdie toegang voorregte word dan implisiet toegestaan wanneer die uitbreiding geïnstalleer word. So kan 'n kwaadwillige of gecompromitteerde uitbreiding met hierdie voorregte jou bewegingsprofiel skep of jou klembord monitor vir gekopieerde wagwoorde sonder dat jy enigiets agterkom.

Die toevoeging van die history sleutelwoord aan die permissions entry van die uitbreiding manifest verleen toegang tot die history API. Dit laat toe om die gebruiker se hele blaai geskiedenis in een keer te verkry, sonder om te wag vir die gebruiker om hierdie webwerwe weer te besoek.

Die bookmarks toestemming het soortgelyke misbruik potensiaal, hierdie een laat toe om alle boekmerke via die bookmarks API te lees.

Berging toestemming

Die uitbreiding berging is bloot 'n sleutel-waarde versameling, baie soortgelyk aan localStorage wat enige webwerf kan gebruik. So moet daar geen sensitiewe inligting hier gestoor word nie.

Echter, advertensie maatskappye kan ook hierdie berging misbruik.

Meer toestemmings

Jy kan die volledige lys van toestemmings wat 'n Chromium Blaaiers Uitbreiding kan vra hier vind en 'n volledige lys vir Firefox uitbreidings hier.

Voorkoming

Die beleid van Google se ontwikkelaar verbied eksplisiet uitbreidings om meer voorregte te vra as wat nodig is vir hul funksionaliteit, wat effektief oortollige toestemming versoeke verminder. 'n Voorbeeld waar 'n blaaiers uitbreiding hierdie grens oorgesteek het, het betrokke by die verspreiding daarvan saam met die blaaiers self eerder as deur 'n byvoeging winkel.

Blaaiers kan verder die misbruik van uitbreiding voorregte beperk. Byvoorbeeld, Chrome se tabCapture en desktopCapture API's, wat vir skermopnames gebruik word, is ontwerp om misbruik te minimaliseer. Die tabCapture API kan slegs geaktiveer word deur direkte gebruikersinteraksie, soos om op die uitbreiding ikoon te klik, terwyl desktopCapture gebruikersbevestiging vereis vir die venster wat opgeneem moet word, wat geheime opname aktiwiteite voorkom.

Echter, om sekuriteitsmaatreëls te verskerp lei dikwels tot verminderde buigsaamheid en gebruikersvriendelikheid van uitbreidings. Die activeTab toestemming illustreer hierdie afruil. Dit is bekendgestel om die behoefte aan uitbreidings om gasheer voorregte oor die hele internet te vra, te elimineer, wat uitbreidings toelaat om slegs die huidige oortjie te benader op eksplisiete aktivering deur die gebruiker. Hierdie model is effektief vir uitbreidings wat gebruikers-gestuurde aksies benodig, maar val kort vir diegene wat outomatiese of voorafgaande aksies benodig, wat gerief en onmiddellike reaksie in gevaar stel.

Verwysings

Ondersteun HackTricks

Last updated