BrowExt - toestemmings & host_permissions
Reading time: 9 minutes
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
permissions
Toestemmings word gedefinieer in die uitbreiding se manifest.json
lêer 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 storage 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, versoek en na die installering 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 versoek 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>"
]
Hierdie is die gasheer wat die blaaierspesie toegang kan verkry. Dit is omdat wanneer 'n blaaierspesie fetch("https://gmail.com/")
aanroep, dit nie deur CORS beperk word nie.
Misbruik van permissions
en host_permissions
Oortjies
Boonop ontsluit host_permissions
ook "gevorderde" tabs API funksionaliteit. Dit stel die spesie in staat om tabs.query() aan te roep en nie net 'n lys van die gebruiker se blaaiertabs terug te kry nie, maar ook te leer watter webblad (wat adres en titel beteken) gelaai is.
caution
Nie net dit nie, luisteraars soos tabs.onUpdated word ook baie nuttiger. Hierdie sal kennisgewing ontvang wanneer 'n nuwe bladsy in 'n tab laai.
Loop inhoudskripte
Inhoudskripte is nie noodwendig staties in die spesie-manifes geskryf nie. Gegewe voldoende host_permissions
, kan spesies dit ook dinamies laai deur tabs.executeScript() of scripting.executeScript() aan te roep.
Albei API's stel die uitvoering van nie net lêers wat in die spesies as inhoudskripte bevat is nie, maar ook arbitraire kode. Die eerste stel die oorgang van JavaScript-kode as 'n string toe, terwyl die laaste 'n JavaScript-funksie verwag wat minder geneig is tot inspuitingskwesbaarhede. Tog, albei API's sal chaos veroorsaak as dit verkeerd gebruik word.
caution
Benewens die bogenoemde vermoëns, kan inhoudskripte byvoorbeeld akkrediteerbare inligting onderskep soos dit in webbladsye 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 spesie voorregte hoef nie eksplisiet verklaar te word nie. Een voorbeeld is die tabs API: sy basiese funksionaliteit is toeganklik sonder enige voorregte. Enige spesie kan kennisgewing ontvang wanneer jy tabs oopmaak en sluit, dit sal net nie weet watter webwerf hierdie tabs ooreenstem nie.
Klink te onskadelik? Die tabs.create() API is ietwat minder so. Dit kan gebruik word om 'n nuwe tab 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.
caution
'N spesie kan enige aantal tabs 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 tab wysig. So kan 'n kwaadwillige spesie byvoorbeeld arbitrêr 'n advertensiebladsy in een van jou tabs laai, en dit kan ook die ooreenstemmende tab aktiveer.
Webkamera, geolokasie en vriende
Jy weet waarskynlik dat webwerwe spesiale toestemming kan vra, byvoorbeeld om toegang tot jou webkamera (video-konferensietools) of geografiese ligging (kaarte) te verkry. Dit is funksies met aansienlike potensiaal vir misbruik, so gebruikers moet elke keer bevestig dat hulle steeds dit wil hê.
caution
Nie so met blaaierspesies nie. As 'n blaaierspesie toegang tot jou webkamera of mikrofoon wil hê, hoef dit net een keer toestemming te vra
Tipies sal 'n spesie dit onmiddellik na installasie doen. Sodra hierdie uitnodiging aanvaar word, is toegang tot die webkamera te enige tyd moontlik, selfs al interaksie die gebruiker nie met die spesie op hierdie punt nie. Ja, 'n gebruiker sal hierdie uitnodiging net aanvaar as die spesie regtig toegang tot die webkamera benodig. Maar daarna moet hulle die spesie vertrou om nie enigiets 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 spesie voeg eenvoudig geolocation
of clipboard
by die permissions entry van sy manifes. Hierdie toegang voorregte word dan implisiet toegestaan wanneer die spesie geïnstalleer word. So 'n kwaadwillige of gecompromitteerde spesie met hierdie voorregte kan jou bewegingsprofiel skep of jou klembord monitor vir gekopieerde wagwoorde sonder dat jy enigiets opmerk.
Die toevoeging van die history
sleutelwoord aan die permissions entry van die spesie-manifes verleen toegang tot die history API. Dit stel in staat 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 stel toegang tot alle boekmerke via die bookmarks API toe.
Berging toestemming
Die spesie berging is bloot 'n sleutel-waarde versameling, baie soortgelyk aan localStorage wat enige webwerf kan gebruik. So geen sensitiewe inligting moet hier gestoor word nie.
Echter, advertensie maatskappye kan ook hierdie berging misbruik.
Meer toestemming
Jy kan die volledige lys van toestemming wat 'n Chromium Blaaierspesie kan vra hier vind en 'n volledige lys vir Firefox spesies hier.
Prevensie
Die beleid van Google se ontwikkelaar verbied eksplisiet spesies om meer voorregte te vra as wat nodig is vir hul funksionaliteit, wat effektief oortollige toestemming versoeke verminder. 'N Voorbeeld waar 'n blaaierspesie hierdie grens oorgesteek het, het behels dat dit saam met die blaaierself versprei is eerder as deur 'n byvoeging winkel.
Blaaiers kan verder die misbruik van spesie 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 spesie 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 spesies. Die activeTab toestemming illustreer hierdie afruil. Dit is bekendgestel om die behoefte aan spesies om gasheer voorregte oor die hele internet te vra, te elimineer, wat spesies toelaat om slegs die huidige tab te benader op eksplisiete aktivering deur die gebruiker. Hierdie model is effektief vir spesies wat gebruikers-gestimuleerde aksies benodig, maar faal vir diegene wat outomatiese of voorafgaande aksies benodig, wat gerief en onmiddellike reaksie benadeel.
Verwysings
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.