15 KiB
BrowExt - permissions & host_permissions
Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
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!
- Obtenez le merchandising officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection d'NFTs exclusifs
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de hacking en soumettant des PR aux dépôts github HackTricks et HackTricks Cloud.
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 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 :
![](/Mirrors/hacktricks/media/commit/e2adfff945cd38b676b9321bc1472476474dd652/.gitbook/assets/image%20%282%29%20%281%29.png)
Vous pouvez trouver la liste complète des permissions qu'une Extension de Navigateur Chromium peut demander ici et une liste complète pour les extensions Firefox ici.
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
, webRequest
, et tabs
.
Les host_permissions
suivants permettent essentiellement à tous les web :
"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.
Abuser des permissions
et host_permissions
Onglets
De plus, host_permissions
débloquent également des fonctionnalités avancées de l'API des onglets. Elles permettent à l'extension d'appeler 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.
{% hint style="danger" %} Non seulement cela, des écouteurs comme 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
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() ou 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.
{% hint style="danger" %} 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. {% endhint %}
Privilèges implicites
Certains privilèges d'extension n'ont pas besoin d'être déclarés explicitement. Un exemple est l'API des onglets : 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() l'est un peu moins. Elle peut être utilisée pour créer un nouvel onglet, essentiellement la même chose que 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.
{% hint style="danger" %} 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.
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
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, 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 ou au contenu de votre presse-papiers, accorder explicitement la permission est inutile. Une extension ajoute simplement geolocation
ou clipboard
à l'entrée 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 du manifeste de l'extension accorde l'accès à l' API de l'historique. 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.
Permission de stockage
Le stockage de l'extension est simplement une collection clé-valeur, très similaire à 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 et une liste complète pour les extensions Firefox ici.
Prévention
Les politiques de développement de Google interdisent explicitement 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, 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 ou 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. 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.
Références
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
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!
- Obtenez le merchandising officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection d'NFTs exclusifs
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de hacking en soumettant des PR aux repos github HackTricks et HackTricks Cloud.