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

15 KiB

BrowExt - permissions & host_permissions

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Basic Information

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 qu'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 APIs localStorage qui donnent aux utilisateurs un certain niveau de contrôle, le stockage des extensions 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 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 pourra interagir via des APIs telles que cookies, webRequest, et tabs.

Les host_permissions suivants permettent essentiellement d'accéder à tous les sites 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. Cela est dû au fait qu'une extension de navigateur qui appelle fetch("https://gmail.com/") n'est pas restreinte par CORS.

Abus de permissions et host_permissions

Onglets

De plus, host_permissions déverrouille également la fonctionnalité "avancée" de l'API tabs. Elles permettent à l'extension d'appeler 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 deviendront également beaucoup plus utiles. Ceux-ci 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 suffisants, les extensions peuvent également les charger dynamiquement en appelant tabs.executeScript() ou 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. La première permet de passer du code JavaScript sous forme de chaîne, tandis que la seconde attend une fonction JavaScript qui est moins sujette aux vulnérabilités d'injection. Cependant, 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 qu'ils sont saisis sur des pages web. Une autre façon 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 rediriger 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 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() 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ée par n'importe quel site web. Pourtant, alors que window.open() est soumis au bloqueur de pop-ups, tabs.create() ne l'est pas.

{% hint style="danger" %} Une extension peut créer n'importe quel nombre d'onglets quand elle le souhaite. {% 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 de URI data: avec cette API, Chrome n'a pas cette protection. L'utilisation de telles URI au niveau supérieur a été interdite en raison d'abus 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 publicitaire 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 autorisations spéciales, par exemple pour accéder à votre webcam (outils de visioconférence) ou à votre localisation géographique (cartes). Ce sont des fonctionnalités avec un potentiel d'abus considérable, donc les utilisateurs doivent chaque fois confirmer qu'ils souhaitent toujours cela.

{% 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, 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, il doit faire confiance à l'extension pour ne rien enregistrer secrètement.

Avec l'accès à votre localisation géographique exacte ou au contenu de votre presse-papiers, accorder la permission explicitement est totalement inutile. Une extension ajoute simplement geolocation ou clipboard à l' entrée de permissions de son manifeste. Ces privilèges d'accès sont ensuite accordés implicitement lorsque l'extension est installée. 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 quoi que ce soit.

Ajouter le mot-clé history à l'entrée de permissions du manifeste de l'extension accorde l'accès à l' API history. Cela permet de récupérer l'historique de navigation complet de l'utilisateur d'un seul coup, 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 signets via l' API bookmarks.

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 y être stockée.

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

La politique des développeurs de Google interdit explicitement aux extensions de demander plus de privilèges que nécessaire pour leur fonctionnalité, atténuant ainsi efficacement les demandes de permissions excessives. Un exemple où une extension de navigateur a dépassé cette limite impliquait sa distribution avec le navigateur lui-même plutôt que par le biais d'un magasin d'add-ons.

Les navigateurs pourraient également limiter davantage l'abus des privilèges d'extension. Par exemple, les tabCapture et desktopCapture APIs 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 cliquer sur l'icône de l'extension, tandis que desktopCapture nécessite la confirmation de l'utilisateur pour que la fenêtre soit enregistrée, empêchant ainsi les activités d'enregistrement clandestin.

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 la nécessité 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 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

{% hint style="success" %} Apprenez et pratiquez le Hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le Hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks
{% endhint %}