hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md

141 lines
14 KiB
Markdown
Raw Normal View History

2024-02-11 02:07:06 +00:00
# BrowExt - toestemmings & host_toestemmings
<details>
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2023-12-31 01:25:17 +00:00
* As jy wil sien jou **maatskappy geadverteer in HackTricks** of **laai HackTricks af in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 02:07:06 +00:00
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
2024-02-11 02:07:06 +00:00
## Basiese Inligting
2024-02-11 02:07:06 +00:00
### **`toestemmings`**
Toestemmings word gedefinieer in die uitbreiding se **`manifest.json`** lêer deur die **`toestemmings`** eienskap te gebruik en gee toegang tot byna alles waartoe 'n blaaier toegang kan hê (Koekies of Fisiese Berging):
Die vorige manifest verklaar dat die uitbreiding die `storage` toestemming benodig. Dit beteken dat dit die [die stoor API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kan gebruik om sy data volhoudbaar te stoor. Anders as koekies of `localStorage` API's wat gebruikers 'n mate van beheer gee, **kan uitbreidingsberging normaalweg slegs deur die uitbreiding te deïnstalleer, skoongemaak word**.
'n Uitbreiding sal die toestemmings wat in sy **`manifest.json`** lêer aangedui word, aanvra en Na die installering van die uitbreiding, kan jy **altyd sy toestemmings in jou blaaier nagaan**, soos in hierdie beeld getoon:
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jy kan die [**volledige lys van toestemmings wat 'n Chromium Blaaier Uitbreiding kan aanvra hier vind**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) en 'n [**volledige lys vir Firefox-uitbreidings hier**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
2024-02-11 02:07:06 +00:00
### `host_toestemmings`
Die opsionele maar kragtige instelling **`host_toestemmings`** dui aan met watter gasheer die uitbreiding in staat gaan wees om te interakteer via api's soos [`koekies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest), en [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
Die volgende `host_toestemmings` laat basies elke web toe:
```json
"host_permissions": [
2024-02-11 02:07:06 +00:00
"*://*/*"
]
// Or:
"host_permissions": [
2024-02-11 02:07:06 +00:00
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
2024-02-11 02:07:06 +00:00
"<all_urls>"
]
```
Dit is die gasheer wat die blaaieruitbreiding vrylik kan benader. Dit is omdat wanneer 'n blaaieruitbreiding **`fetch("https://gmail.com/")`** aanroep, dit nie beperk word deur CORS nie.
2024-02-11 02:07:06 +00:00
## Misbruik van `permissions` en `host_permissions`
### Voeë
Verder, **`host_permissions`** ontgrendel ook "gevorderde" [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **funksionaliteit.** Dit laat die uitbreiding toe om [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) aan te roep en nie net 'n **lys van die gebruiker se blaaieruitbreidings** terug te kry nie, maar ook te leer watter **webbladsy (beteken adres en titel) gelaai is**.
{% hint style="danger" %}
Nie net dit nie, luisteraars soos [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **word ook baie nuttiger**. Hierdie sal in kennis gestel word wanneer 'n nuwe bladsy in 'n voë laai.
{% endhint %}
2024-02-11 02:07:06 +00:00
### Uitvoering van inhoudskripte <a href="#running-content-scripts" id="running-content-scripts"></a>
Inhoudskripte is nie noodwendig staties in die uitbreidingsmanifes geskryf nie. Met voldoende **`host_permissions`**, **kan uitbreidings hulle ook dinamies laai deur** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **of** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript) **te roep**.
Beide API's maak dit moontlik om nie net lêers wat in die uitbreidings as inhoudskripte ingesluit is nie, uit te voer nie, maar ook **willekeurige kode**. Die eerste maak dit moontlik om JavaScript-kode as 'n string in te voer terwyl die laaste 'n JavaScript-funksie verwag wat minder vatbaar vir inspuitingskwesbaarhede is. Nogtans, beide API's sal skade aanrig as dit verkeerd gebruik word.
{% hint style="danger" %}
Bo en behalwe die bogenoemde vermoëns, kan inhoudskripte byvoorbeeld **geloofsbriewe onderskep** soos dit in webbladsye ingevoer word. 'n Ander klassieke manier om hulle te misbruik, is om **advertensies in te spuit** op elke webwerf. Die byvoeging van **bedrogboodskappe** om die geloofwaardigheid van nuuswebwerwe te misbruik, is ook moontlik. Laastens kan hulle **bankwebwerwe manipuleer** om geldoorplasings om te lei.
{% endhint %}
2024-02-11 02:07:06 +00:00
### Implisiete voorregte <a href="#implicit-privileges" id="implicit-privileges"></a>
Sommige uitbreidingsvoorregte **hoef nie uitdruklik verklaar te word nie**. Een voorbeeld is die [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): sy basiese funksionaliteit is toeganklik sonder enige voorregte. Enige uitbreiding kan in kennis gestel word wanneer jy voë oopmaak en sluit, dit sal eenvoudig nie weet met watter webwerf hierdie voë ooreenstem nie.
Klink dit te onskuldig? Die [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) is ietwat minder so. Dit kan gebruik word om **'n nuwe voë te skep**, essensieel dieselfde as [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) wat deur enige webwerf geroep kan word. Tog terwyl `window.open()` onderhewig is aan die **pop-up blokkeerder, `tabs.create()` nie**.
{% hint style="danger" %}
'n Uitbreiding kan enige aantal voë op enige tyd skep.
{% endhint %}
As jy deur moontlike `tabs.create()`-parameters kyk, sal jy ook besef dat sy vermoëns ver buite gaan wat `window.open()` toegelaat word om te beheer. En terwyl Firefox nie toelaat dat `data:` URI's met hierdie API gebruik word nie, het Chrome geen sulke beskerming nie. **Die gebruik van sulke URI's op die boonste vlak is** [**verbied weens misbruik vir hengelary**](https://bugzilla.mozilla.org/show\_bug.cgi?id=1331351)**.**
[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) is baie soortgelyk aan `tabs.create()` maar sal **'n bestaande voë wysig**. Dus kan 'n skadelike uitbreiding byvoorbeeld arbitrêr 'n advertensiebladsy in een van jou voë laai, en dit kan ook die ooreenstemmende voë aktiveer.
### Webkamera, geolokasie en vriende <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
Jy weet waarskynlik dat webwerwe spesiale toestemmings kan versoek, bv. om toegang tot jou webkamera (videovergaderingshulpmiddels) of geografiese ligging (kaarte) te verkry. Dit is kenmerke met aansienlike potensiaal vir misbruik, sodat gebruikers elke keer moet bevestig dat hulle dit steeds wil hê.
{% hint style="danger" %}
Nie so met blaaieruitbreidings nie. **As 'n blaaieruitbreiding** [**toegang tot jou webkamera of mikrofoon wil hê**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, hoef dit net een keer om toestemming te vra**
{% endhint %}
Gewoonlik sal 'n uitbreiding dit dadelik na installasie doen. Nadat hierdie versoek aanvaar is, is **webkamera-toegang te eniger tyd moontlik**, selfs as die gebruiker nie op daardie oomblik met die uitbreiding interaksie het nie. Ja, 'n gebruiker sal hierdie versoek slegs aanvaar as die uitbreiding werklik webkamera-toegang benodig. Maar daarna moet hulle die uitbreiding vertrou om niks heimlik op te neem nie.
Met toegang tot [jou presiese geografiese ligging](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) of [inhoud van jou knipbord](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API), is dit heeltemal onnodig om toestemming eksplisiet te verleen. **'n Uitbreiding voeg eenvoudig `geolocation` of `clipboard` by die** [**permissions entry**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **van sy manifest**. Hierdie toegangsvoorregte word dan implisiet verleen wanneer die uitbreiding geïnstalleer word. Dus kan 'n skadelike of gekompromitteerde uitbreiding met hierdie voorregte jou bewegingsprofiel skep of jou knipbord monitor vir gekopieerde wagwoorde sonder dat jy iets daarvan agterkom.
Die **`history`** **toestemming** het soortgelyke misbruikpotensiaal, dit maak dit moontlik om **die hele blaai-geskiedenis van die gebruiker in een keer te herwin**, sonder om te wag vir die gebruiker om hierdie webwerwe weer te besoek.
Die **`bookmarks`** **toestemming** het soortgelyke misbruikpotensiaal, dit maak dit moontlik om **alle bladmerke via die** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks) **uit te lees**.
### Bergingstoestemming <a href="#the-storage-permission" id="the-storage-permission"></a>
Die uitbreidingsberging is bloot 'n sleutel-waarde versameling, baie soortgelyk aan [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) wat enige webwerf kan gebruik. Dus behoort daar geen sensitiewe inligting hier gestoor te word nie.
Nietemin kan advertensie-maatskappye ook hierdie berging misbruik.
### Meer toestemmings
Jy kan die [**volledige lys van toestemmings wat 'n Chromium Blaaieruitbreiding kan versoek hier vind**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) en 'n [**volledige lys vir Firefox-uitbreidings hier**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
## Voorkoming <a href="#why-not-restrict-extension-privileges" id="why-not-restrict-extension-privileges"></a>
Die beleid van Google se ontwikkelaar verbied uitbreidings uitdruklik om meer voorregte as nodig vir hul funksionaliteit aan te vra, wat oormatige versoekings vir toestemming effektief verminder. 'n Voorbeeld waar 'n blaaieruitbreiding hierdie grens oorskry het, behels sy verspreiding met die blaaier self eerder as deur 'n byvoegingstoor.
Blaaier kan verder die misbruik van uitbreidingsvoorregte beperk. Byvoorbeeld, Chrome se [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) en [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) API's, wat vir skermopnames gebruik word, is ontwerp om misbruik te minimaliseer. Die tabCapture API kan slegs deur direkte gebruikerinteraksie geaktiveer word, soos deur op die uitbreidingsikoon te klik, terwyl desktopCapture gebruikersbevestiging vereis vir die venster om opgeneem te word, wat heimlike opname-aktiwiteite voorkom.
Tog lei die verskerping van sekuriteitsmaatreëls dikwels tot 'n afname in die buigsaamheid en gebruikersvriendelikheid van uitbreidings. Die [activeTab toestemming](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab\_permission) illustreer hierdie afweging. Dit is ingestel om die behoefte vir uitbreidings om gasheer-voorregte oor die hele internet aan te vra, te elimineer, sodat uitbreidings slegs die huidige voë kan benader nadat dit deur die gebruiker eksplisiet geaktiveer is.
Hierdie model is doeltreffend vir uitbreidings wat gebruiker-geïnisieerde aksies vereis, maar skiet tekort vir dié wat outomatiese of voorspellende aksies vereis, wat gevolglik gerief en onmiddellike reaksievermoë kompromitteer.
2024-02-11 02:07:06 +00:00
## **Verwysings**
* [https://palant.info/2022/08/17/impact-of-extension-privileges/](https://palant.info/2022/08/17/impact-of-extension-privileges/)
* [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2023-12-31 01:25:17 +00:00
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 02:07:06 +00:00
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>