<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Autres moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Informations de base
### **`permissions`**
Les permissions sont définies dans le fichier **`manifest.json`** de l'extension en utilisant la propriété **`permissions`** et permettent l'accès à 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 la permission `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é qu'en désinstallant l'extension**.
Une extension demandera les permissions indiquées dans son fichier **`manifest.json`** et après l'installation de l'extension, vous pouvez **toujours vérifier ses permissions dans votre navigateur**, comme le montre cette image :
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)**.**
### `host_permissions`
Le paramètre optionnel 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 à tous les web :
```json
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
```
Ces hôtes sont ceux auxquels l'extension de navigateur peut accéder librement. C'est parce que lorsqu'une extension de navigateur appelle **`fetch("https://gmail.com/")`**, elle n'est pas restreinte par CORS.
De plus, **`host_permissions`** débloquent également des fonctionnalités avancées de l'[**API des onglets**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Elles permettent à l'extension d'appeler [tabs.query()](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) et d'obtenir non seulement une **liste des onglets du navigateur de l'utilisateur** mais aussi de connaître quelle **page web (c'est-à-dire adresse et titre) est chargée**.
Non seulement cela, des écouteurs comme [**tabs.onUpdated**](https://developer.mozilla.org/fr/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écuter des scripts de contenu <a href="#running-content-scripts" id="running-content-scripts"></a>
Les scripts de contenu ne sont pas nécessairement écrits de manière statique dans le manifeste de l'extension. Avec des **`host_permissions`** suffisants, **les extensions peuvent également les charger dynamiquement en appelant** [**tabs.executeScript()**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **ou** [**scripting.executeScript()**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript).
Ces 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**. La première permet de passer du code JavaScript sous forme de chaîne de caractères tandis que la seconde attend une fonction JavaScript, ce qui est moins sujet aux vulnérabilités d'injection. Néanmoins, les deux API peuvent causer des ravages si elles sont mal utilisées.
En plus des capacités ci-dessus, les scripts de contenu pourraient par exemple **intercepter des identifiants** au fur et à mesure de leur saisie sur des pages web. Une autre manière classique de les abuser est **d'injecter de la publicité** sur chaque site web. Ajouter des **messages d'escroquerie** pour abuser de la crédibilité des sites d'actualités est également possible. Enfin, ils pourraient **manipuler des sites bancaires** pour détourner des transferts d'argent.
Certains privilèges d'extension **n'ont pas besoin d'être déclarés explicitement**. Un exemple est l'[API des onglets](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs) : ses fonctionnalités de base sont accessibles sans aucun privilège. Toute extension peut être notifiée lorsque vous ouvrez et fermez des onglets, elle ne saura simplement pas à quel site web ces onglets correspondent.
Cela semble trop inoffensif ? L'API [tabs.create()](https://developer.mozilla.org/fr/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/fr/docs/Web/API/Window/open) qui peut être appelé par n'importe quel site web. Pourtant, alors que `window.open()` est soumis au **bloqueur de pop-up, `tabs.create()` ne l'est pas**.
Une extension peut créer autant d'onglets qu'elle le souhaite, quand elle le veut.
{% 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 tandis que Firefox n'autorise pas l'utilisation d'URI `data:` avec cette API, Chrome n'a pas une telle protection. **L'utilisation de telles URI au niveau supérieur a été** [**interdite en raison de leur utilisation pour le phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.**
[**tabs.update()**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) est très similaire à `tabs.create()` mais va **modifier un onglet existant**. Ainsi, une extension malveillante peut par exemple charger arbitrairement une page de publicité dans l'un de vos onglets, et elle peut également activer l'onglet correspondant.
### Webcam, géolocalisation et amis <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
Vous savez probablement que les sites web peuvent demander des permissions spéciales, par exemple pour accéder à votre webcam (outils de vidéoconférence) ou à votre position géographique (cartes). Ce sont des fonctionnalités avec un potentiel considérable d'abus, donc les utilisateurs doivent chaque fois confirmer qu'ils veulent toujours cela.
{% hint style="danger" %}
Pas avec les extensions de navigateur. **Si une extension de navigateur** [**veut accéder à votre webcam ou à votre microphone**](https://developer.mozilla.org/fr/docs/Web/API/MediaDevices/getUserMedia)**, elle n'a besoin de demander la permission qu'une seule fois**
{% endhint %}
Typiquement, une extension le fera immédiatement après son installation. Une fois cette invite 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 invite que si l'extension a vraiment besoin d'accéder à la webcam. Mais après cela, ils doivent faire confiance à l'extension pour ne rien enregistrer secrètement.
Avec l'accès à [votre position géographique exacte](https://developer.mozilla.org/fr/docs/Web/API/Geolocation) ou [au contenu de votre presse-papiers](https://developer.mozilla.org/fr/docs/Web/API/Clipboard_API), accorder explicitement la permission est inutile. **Une extension ajoute simplement `geolocation` ou `clipboard` à l'entrée** [**permissions**](https://developer.mozilla.org/fr/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 mouvement ou surveiller votre presse-papiers pour des mots de passe copiés sans que vous ne remarquiez rien.
Ajouter le mot-clé **`history`** à l'entrée [permissions](https://developer.mozilla.org/fr/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/fr/docs/Mozilla/Add-ons/WebExtensions/API/history). Elle 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, elle permet **de lire tous les favoris via l'** [**API des favoris**](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
### Permission de stockage <a href="#the-storage-permission" id="the-storage-permission"></a>
Le stockage de l'extension est simplement une collection clé-valeur, très similaire à [localStorage](https://developer.mozilla.org/fr/docs/Web/API/Window/localStorage) que n'importe quel site web pourrait utiliser. Donc, 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/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.**
Les politiques de développement de Google [interdisent explicitement](https://developer.chrome.com/docs/webstore/program_policies/#permissions) de demander plus de privilèges que nécessaire pour que l'extension fonctionne. D'après mon expérience, cette règle fonctionne en fait. Je ne peux penser qu'à un cas où une extension de navigateur [a demandé trop de privilèges](https://palant.info/2020/01/13/pwning-avast-secure-browser-for-fun-and-profit/#selecting-a-target), et cette extension particulière était distribuée avec le navigateur plutôt que via une boutique d'add-ons.
Dans certains cas, les navigateurs pourraient mieux faire pour **limiter le potentiel d'abus** des privilèges d'extension. Par exemple, Chrome permet l'enregistrement d'écran via les API [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) ou [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/). Le potentiel d'abus est faible car le premier ne peut être démarré qu'en **réponse à une action de l'utilisateur** (généralement en cliquant sur l'icône de l'extension) tandis que le second affiche une invite pour sélectionner la fenêtre de l'application à enregistrer. Les deux sont suffisants pour empêcher les extensions de commencer à enregistrer en arrière-plan en silence.
Cependant, de telles améliorations de sécurité ont tendance à rendre les extensions **moins flexibles et moins conviviales**. Un bon exemple ici est la [permission activeTab](https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission). Son but est de rendre inutile la demande de privilèges d'hôte pour l'ensemble d'internet. Au lieu de cela, **l'extension peut accéder à l'onglet actuel lorsque l'extension est explicitement activée**, généralement en cliquant sur son icône.
Cette approche fonctionne bien pour certaines extensions, en particulier celles où l'utilisateur doit déclencher explicitement une action. Elle **ne fonctionne pas dans les scénarios où les extensions doivent effectuer leur travail automatiquement** cependant (ce qui signifie être plus pratique pour l'utilisateur) ou lorsque l'action de l'extension ne peut pas être exécutée immédiatement et nécessite une préparation.
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* 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)!
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).