# BrowExt - autorisations et host_permissions
Apprenez le piratage AWS de zéro à héros avechtARTE (Expert en équipe rouge AWS de HackTricks)!
Autres façons de soutenir HackTricks :
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
## Informations de base
### **`permissions`**
Les autorisations sont définies dans le fichier **`manifest.json`** de l'extension en utilisant la propriété **`permissions`** et permettent d'accéder à presque tout ce à quoi un navigateur peut accéder (cookies ou stockage physique) :
Le manifeste précédent déclare que l'extension nécessite l'autorisation `storage`. Cela signifie qu'elle peut utiliser [l'API de stockage](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) pour stocker ses données de manière persistante. Contrairement aux cookies ou aux API `localStorage` qui donnent aux utilisateurs un certain niveau de contrôle, **le stockage de l'extension ne peut normalement être effacé que en désinstallant l'extension**.
Une extension demandera les autorisations indiquées dans son fichier **`manifest.json`** et après l'installation de l'extension, vous pouvez **toujours vérifier ses autorisations dans votre navigateur**, comme le montre cette image :
Vous pouvez trouver la [**liste complète des autorisations qu'une extension de navigateur Chromium peut demander ici**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) et une [**liste complète pour les extensions Firefox ici**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
### `host_permissions`
Le paramètre facultatif mais puissant **`host_permissions`** indique avec quels hôtes l'extension va pouvoir interagir via des APIs telles que [`cookies`](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) et [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
Les `host_permissions` suivants permettent essentiellement à chaque site web :
```json
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
""
]
```
Voici les hôtes auxquels l'extension de navigateur peut accéder librement. Cela est dû au fait que lorsqu'une extension de navigateur appelle **`fetch("https://gmail.com/")`**, elle n'est pas restreinte par CORS.
## Abus des `permissions` et `host_permissions`
### Onglets
De plus, les **`host_permissions`** débloquent également les fonctionnalités avancées de l'API [**tabs**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Ils permettent à l'extension d'appeler [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) et non seulement d'obtenir une **liste des onglets du navigateur de l'utilisateur**, mais aussi de savoir quelle **page web (c'est-à-dire l'adresse et le titre) est chargée**.
{% hint style="danger" %}
Non seulement cela, mais des écouteurs comme [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **deviennent également beaucoup plus utiles**. Ils seront notifiés chaque fois qu'une nouvelle page se charge dans un onglet.
{% endhint %}
### Exécution de scripts de contenu
Les scripts de contenu ne sont pas nécessairement écrits statiquement dans le manifeste de l'extension. Avec des **`host_permissions`** suffisantes, les **extensions peuvent également les charger dynamiquement en appelant** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **ou** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript).
Les deux API permettent d'exécuter non seulement des fichiers contenus dans les extensions en tant que scripts de contenu, mais aussi du **code arbitraire**. Le premier permet de passer du code JavaScript en tant que chaîne, tandis que le second attend une fonction JavaScript qui est moins sujette aux vulnérabilités par injection. Cependant, les deux API causeront des ravages s'ils sont mal utilisés.
{% hint style="danger" %}
En plus des capacités ci-dessus, les scripts de contenu pourraient par exemple **intercepter des identifiants** au moment où ils sont saisis dans les pages web. Une autre façon classique de les abuser est d'**injecter de la publicité** sur chaque site web. Ajouter des **messages d'arnaque** pour abuser de la crédibilité des sites d'actualités est également possible. Enfin, ils pourraient **manipuler les sites web bancaires** pour détourner des transferts d'argent.
{% endhint %}
### Privilèges implicites
Certains privilèges d'extension **n'ont pas besoin d'être explicitement déclarés**. Un exemple est l'API [tabs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) : sa fonctionnalité de base est accessible sans aucun privilège. Toute extension peut être notifiée lorsque vous ouvrez et fermez des onglets, elle ne saura simplement pas avec quel site web ces onglets correspondent.
Cela semble trop inoffensif ? L'API [tabs.create()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) l'est un peu moins. Elle peut être utilisée pour **créer un nouvel onglet**, essentiellement la même chose que [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) qui peut être appelé par n'importe quel site web. Cependant, alors que `window.open()` est soumis au **bloqueur de pop-up, `tabs.create()` ne l'est pas**.
{% hint style="danger" %}
Une extension peut créer autant d'onglets qu'elle le souhaite, à tout moment.
{% endhint %}
Si vous examinez les paramètres possibles de `tabs.create()`, vous remarquerez également que ses capacités vont bien au-delà de ce que `window.open()` est autorisé à contrôler. Et bien que Firefox n'autorise pas l'utilisation d'URI `data:` avec cette API, Chrome n'a pas cette protection. **L'utilisation de ces URI au niveau supérieur a été** [**interdite en raison de leur utilisation abusive pour le phishing**](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) est très similaire à `tabs.create()` mais **modifiera un onglet existant**. Ainsi, une extension malveillante peut par exemple charger arbitrairement une page publicitaire dans l'un de vos onglets, et elle peut également activer l'onglet correspondant.
### Webcam, géolocalisation et compagnie
Vous savez probablement que les sites web peuvent demander des autorisations spéciales, par exemple pour accéder à votre webcam (outils de visioconférence) ou à votre emplacement géographique (cartes). Il s'agit de fonctionnalités avec un potentiel considérable d'abus, donc les utilisateurs doivent confirmer à chaque fois qu'ils le souhaitent.
{% hint style="danger" %}
Ce n'est pas le cas avec les extensions de navigateur. **Si une extension de navigateur** [**veut accéder à votre webcam ou microphone**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, elle n'a besoin de demander la permission qu'une seule fois**
{% endhint %}
Généralement, une extension le fera immédiatement après son installation. Une fois cette demande acceptée, **l'accès à la webcam est possible à tout moment**, même si l'utilisateur n'interagit pas avec l'extension à ce moment-là. Oui, un utilisateur n'acceptera cette demande que si l'extension a vraiment besoin d'accéder à la webcam. Mais après cela, il doit faire confiance à l'extension pour ne pas enregistrer secrètement quoi que ce soit.
Avec l'accès à [votre emplacement géographique exact](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) ou au [contenu de votre presse-papiers](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API), accorder la permission de manière explicite est totalement inutile. **Une extension ajoute simplement `geolocation` ou `clipboard` à l'entrée des** [**permissions**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **de son manifeste**. Ces privilèges d'accès sont alors accordés implicitement lors de l'installation de l'extension. Ainsi, une extension malveillante ou compromise avec ces privilèges peut créer votre profil de déplacement ou surveiller votre presse-papiers pour des mots de passe copiés sans que vous ne remarquiez quoi que ce soit.
Ajouter le mot-clé **`history`** à l'entrée des [permissions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) du manifeste de l'extension accorde **l'accès à l'** [**API de l'historique**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Cela permet de récupérer l'intégralité de l'historique de navigation de l'utilisateur en une seule fois, sans attendre que l'utilisateur visite à nouveau ces sites web.
La **permission `bookmarks`** a un potentiel d'abus similaire, celle-ci permet de **lire tous les favoris via l'** [**API des favoris**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
### Permission de stockage
Le stockage de l'extension est simplement une collection clé-valeur, très similaire à [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) que n'importe quel site web pourrait utiliser. Ainsi, aucune information sensible ne devrait être stockée ici.
Cependant, les entreprises de publicité pourraient également abuser de ce stockage.
### Plus de permissions
Vous pouvez trouver la [**liste complète des permissions qu'une extension de navigateur Chromium peut demander ici**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) et une [**liste complète pour les extensions Firefox ici**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
## Prévention
La politique du développeur de Google interdit explicitement aux extensions de demander plus de privilèges que nécessaire pour leur fonctionnalité, atténuant ainsi les demandes de permissions excessives. Un cas où une extension de navigateur a outrepassé cette limite impliquait sa distribution avec le navigateur lui-même plutôt que par le biais d'un magasin d'extensions.
Les navigateurs pourraient également limiter davantage les abus des privilèges des extensions. Par exemple, les API [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) et [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) de Chrome, utilisées pour l'enregistrement d'écran, sont conçues pour minimiser les abus. L'API tabCapture ne peut être activée que par une interaction directe de l'utilisateur, comme en cliquant sur l'icône de l'extension, tandis que desktopCapture nécessite une confirmation de l'utilisateur pour que la fenêtre soit enregistrée, empêchant ainsi les activités d'enregistrement clandestines.
Cependant, le renforcement des mesures de sécurité entraîne souvent une diminution de la flexibilité et de la convivialité des extensions. La **permission activeTab** illustre ce compromis. Elle a été introduite pour éliminer le besoin pour les extensions de demander des privilèges d'hôte sur l'ensemble d'Internet, permettant aux extensions d'accéder uniquement à l'onglet actuel sur activation explicite par l'utilisateur. Ce modèle est efficace pour les extensions nécessitant des actions initiées par l'utilisateur, mais il est insuffisant pour celles nécessitant des actions automatiques ou préventives, compromettant ainsi la commodité et la réactivité immédiate.
## **Références**
* [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)
Apprenez le piratage AWS de zéro à héros avechtARTE (HackTricks AWS Red Team Expert)!
Autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.