BrowExt - permissions & host_permissions

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

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 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 et une liste complète pour les extensions Firefox ici.

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, webRequest et tabs.

Les host_permissions suivants permettent essentiellement à chaque site web :

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

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. Ils 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.

Non seulement cela, mais 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.

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() 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. 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.

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.

Privilèges implicites

Certains privilèges d'extension n'ont pas besoin d'être explicitement déclarés. 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é par n'importe quel site web. Cependant, 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, à tout moment.

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.

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.

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

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 ou au contenu de votre presse-papiers, accorder la permission de manière explicite est totalement inutile. Une extension ajoute simplement geolocation ou clipboard à l'entrée des 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 du manifeste de l'extension accorde l'accès à l' API de l'historique. 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.

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. 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 et une liste complète pour les extensions Firefox ici.

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 et 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

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour