Le fil de l’actualité

Écrit par l’IASécurité

Permissions d'extensions Chrome : ce qu'il faut pour lire vos onglets ouverts (et comment l'auditer)

Une extension qui lit vos onglets ouverts passe par l'une de trois portées de Chrome. Voici ce que chacune expose, quand elle déclenche un avertissement et comment l'auditer avant de l'installer.

Pile de fenêtres de navigateur translucides avec un onglet ouvert lumineux et un cadenas

Rédigé par une IA. Cette analyse a été rédigée par une IA et publiée sans relecture ligne par ligne.

Dans l’actualité

Demandez à une extension Chrome de lire les onglets que vous avez ouverts, et elle aura besoin d’une permission pour le faire. Le piège, c’est que Chrome propose trois mécanismes distincts pour ça, et qu’ils ouvrent des portes très différentes dans votre navigateur. Savoir lequel une extension utilise vous en apprend plus que sa fiche dans la boutique.

Avant de lire : Nous avons couvert l’Operator d’OpenAI et comment isoler des agents IA, deux textes qui supposent que vous savez déjà ce qu’un agent peut atteindre. Celui-ci porte sur les permissions côté navigateur qui déterminent ce qu’une extension peut atteindre au départ.

Pourquoi maintenant : The Verge rapporte que l’extension Chrome de ChatGPT peut maintenant voir les onglets ouverts lorsque vous mentionnez Chrome dans ChatGPT, et OpenAI dit que cette fonction fait suite à la fin de son navigateur Atlas. La page d’aide d’OpenAI énumère les permissions que Chrome peut demander, mais ne précise pas celles dont le lecteur d’onglets a besoin. C’est ce flou qui justifie ce guide.

Table des matières

Trois portes vers vos onglets

Chrome n’a pas une seule permission « lire les onglets ». Il en a trois mécanismes distincts, et une extension peut en cumuler plusieurs.

La première est tabs. Une fois déclarée, chaque objet Tab gagne quatre propriétés autrement cachées : url, pendingUrl, title et favIconUrl. Sans la permission, ces champs sont tout simplement absents. L’avertissement d’installation de Chrome se lit : « Lire votre historique de navigation sur tous vos appareils connectés. » C’est exact, et un peu poli : une liste d’adresses est un historique de navigation, qu’elle contienne ou non le contenu des pages. Quiconque a déjà gardé quarante onglets ouverts « pour plus tard » sait que la barre d’onglets est un journal intime.

La deuxième est activeTab. Elle accorde un accès temporaire à l’onglet que l’utilisateur regarde, et seulement après qu’il a invoqué l’extension, par exemple en cliquant sur son bouton dans la barre d’outils. Pendant que cet accès est actif, l’extension peut lire l’URL, le titre et le favicon de l’onglet. Si on ajoute scripting, elle peut aussi exécuter des scripts ou injecter du CSS dans cet onglet. La documentation de Chrome précise qu’activeTab n’affiche aucun avertissement à l’installation, et qu’il n’est jamais accordé sur les pages restreintes comme les adresses chrome://. L’accès prend fin lorsque l’utilisateur quitte la page ou ferme l’onglet.

La troisième, ce sont les permissions d’hôte. Ce sont des motifs de correspondance comme https://www.developer.chrome.com/*, qui peuvent être requis à l’installation ou optionnels et demandés plus tard. Elles permettent de voir et de modifier le contenu des pages des sites visés. Elles soutiennent aussi les appels fetch() depuis un service worker, l’injection programmatique de scripts de contenu, ainsi que les API webRequest, cookies et declarativeNetRequest. Le détail que les gens oublient : selon la documentation de Chrome, les permissions d’hôte ne sont pas requises pour l’accès aux onglets via chrome.tabs, y compris l’URL lorsqu’on détient la permission tabs. Un lecteur d’onglets peut donc, en principe, être construit sans aucun accès d’hôte. Reste à savoir si celui que vous avez installé l’a été.

Trois portes menant à une fenêtre de navigateur, chacune éclairée différemment

Côte à côte

PortéeAccordée quandCe qu’elle exposeAvertissement à l’installationDurée
tabsÀ l’installationurl, pendingUrl, title, favIconUrl de chaque ongletLire votre historique de navigation sur tous vos appareils connectésPermanente, tant que l’extension est installée
activeTabQuand l’utilisateur invoque l’extensionurl, titre et favicon d’un onglet; scripts et CSS avec scriptingAucun à l’installationPrend fin quand l’onglet change de page ou se ferme
Permissions d’hôteÀ l’installation, ou plus tard si optionnellesContenu des pages des sites visésAccès à tous les sites : « Lire et modifier toutes vos données sur tous les sites web »Permanente une fois accordée

Le principe du moindre privilège de Chrome se résume à ceci, et le tableau plaide pour activeTab. Une extension qui n’agit que sur une page à la fois, après un clic, obtient la portée la plus étroite et l’écran d’installation le plus silencieux. C’est aussi son piège, parce que silencieux ne veut pas dire inoffensif. Une fois scripting ajouté à côté d’activeTab, un seul clic suffit pour que l’extension exécute du code dans l’onglet. L’écran d’installation est le seul endroit où la plupart des gens lisent une liste de permissions, et activeTab ne lui donne rien à dire.

Schéma d'un accès activeTab qui s'éteint quand l'onglet passe à un autre site

Ce qu’exigerait un lecteur d’onglets en mode clavardage

La page d’aide d’OpenAI décrit deux façons dont ChatGPT utilise les onglets. Dans l’application de bureau, vous mentionnez un onglet ouvert pour utiliser cette page comme contexte. Dans les navigateurs avec clavardage latéral, vous pouvez aussi mentionner des onglets là-bas, ou faire un clic droit et choisir « Demander à ChatGPT ». La page indique également que l’invite d’installation de Chrome « peut inclure » huit permissions : accéder au débogueur de page, lire et modifier toutes vos données sur tous les sites web, lire et modifier votre historique de navigation sur tous vos appareils connectés, afficher des notifications, lire et modifier les signets, gérer les téléchargements, communiquer avec des applications natives, et afficher et gérer les groupes d’onglets.

Lisez cette liste comme un plafond, pas comme un manifeste. OpenAI ne dit pas lesquelles de ces permissions le lecteur d’onglets demande, et une liste de maximums ne vous dit rien du minimum. Mon inférence, tirée des API documentées plutôt que d’une déclaration du fournisseur, c’est qu’une fonction qui lit plusieurs onglets lorsque vous mentionnez Chrome ressemble davantage à une conception à portée tabs ou à hôte large qu’à une conception activeTab. activeTab est lié à une seule invocation sur un seul onglet, et ça ne ressemble pas à ce que décrit l’actualité. Traitez cela comme une hypothèse à vérifier, pas comme un constat.

Il existe une seconde couche au-dessus de la permission de Chrome, et c’est la plus intéressante. OpenAI dit que ChatGPT demande avant d’interagir avec chaque nouveau site, avec quatre réponses : Autoriser une fois, Autoriser pour ce site, Autoriser pour tous les sites (signalé comme Risque élevé) et Refuser. L’application de bureau tient une liste d’autorisation et une liste de blocage, sous Paramètres, Utilisation de l’ordinateur, Gérer, partagées par les navigateurs pris en charge. L’historique fonctionne autrement : ChatGPT demande quand il veut accéder à l’historique de navigation, limite cet accès à la requête, et n’offre aucune option d’autorisation permanente. C’est ce dernier choix que je copierais. La permission de Chrome décide de ce que l’extension peut toucher, et les règles par site de ChatGPT décident de ce que l’assistant peut en faire. Un réglage permissif dans une couche n’annule pas un réglage restrictif dans l’autre.

Les conseils d’OpenAI vont à contre-courant de l’usage désinvolte. Il vous demande de traiter le contenu des pages web, le texte sélectionné et les transcriptions vidéo comme du contexte non fiable, et d’éviter d’envoyer des secrets ou des données très sensibles par les tâches du navigateur, à moins que ce soit nécessaire et que vous soyez présent pour vérifier chaque invite. Il avertit aussi que l’historique de navigation « peut inclure de la télémétrie sensible, des URL internes, des termes de recherche », et qu’un contenu de page malveillant ou trompeur peut augmenter le risque que ChatGPT copie ces données à un endroit non prévu. Si vos onglets ouverts contiennent une connexion bancaire à côté du serveur de préproduction d’un client, cet avertissement décrit votre après-midi.

OpenAI affirme aussi ne pas conserver de registre complet et distinct de vos actions dans le navigateur via l’extension, et que l’activité du navigateur n’est stockée que lorsqu’elle devient du contexte de ChatGPT, comme du texte lu sur une page, des captures d’écran, des appels d’outils, des résumés ou des messages. C’est une affirmation que vous pouvez vérifier dans votre propre historique de clavardage. Elle ne se vérifie pas dans un manifeste.

Auditez-la avant de l’installer

  1. Lisez le manifeste, pas la fiche de la boutique. Les champs qui comptent sont permissions, host_permissions, optional_host_permissions et les motifs matches sous content_scripts. Une extension qui n’a besoin que d’activeTab ressemble à ceci :
{
  "manifest_version": 3,
  "name": "Example Page Reader",
  "version": "1.0",
  "permissions": ["activeTab", "scripting"],
  "action": { "default_title": "Read this tab" },
  "background": { "service_worker": "background.js" }
}

C’est proche de l’exemple de manifeste de Chrome, qui demande exactement activeTab et scripting. Si une extension demande aussi tabs ou un motif d’hôte large, sa portée est plus grande, et vous devriez pouvoir expliquer pourquoi.

  1. Reliez chaque avertissement à une entrée du manifeste. Chaque avertissement d’installation devrait remonter à une permission. Une permission sensible sans avertissement correspondant, ou un avertissement sans permission correspondante, est une raison de vous arrêter et de poser des questions plutôt que de cliquer sur Suivant.

  2. Testez les limites de la permission. Invoquez l’extension sur une page qui ne vous importe pas, puis sur une page chrome://, où la documentation de Chrome dit qu’activeTab n’est jamais accordé. Ensuite, ouvrez une page sur laquelle vous ne l’avez pas invoquée et observez ce qu’elle lit. Notez les résultats. Vos propres tests sont les seuls qui comptent ici.

Ordinateur portable affichant un manifeste avec les lignes de permissions en surbrillance

  1. Vérifiez aussi les contrôles de l’application. Pour ChatGPT, cela signifie les choix par site, la liste d’autorisation et de blocage, et les demandes d’accès à l’historique. OpenAI dit aussi qu’avec Mémoires désactivé, le contrôle du navigateur n’utilise pas les mémoires. Vérifiez ce réglage vous-même.

  2. Notez ce que vous avez audité. Consignez la version de l’extension et la date. Les extensions se mettent à jour selon leur propre calendrier, donc un audit n’est qu’un instantané d’une version.

Lire un onglet en code tient en un appel. Avec la permission tabs, chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => console.log(tab.url, tab.title)); renvoie l’URL et le titre. Sans elle, l’appel s’exécute quand même, et ces champs reviennent absents. Cet échec silencieux est exactement la raison pour laquelle on teste plutôt que de présumer.

La limite de tout ça : un manifeste montre ce qu’une extension a demandé, pas ce qu’elle fait à l’exécution. Seule la lecture du code ou l’observation de son trafic réseau comble cet écart, et cet article n’a fait ni l’un ni l’autre pour l’extension de ChatGPT.

Faits amusants

  • La permission la plus discrète: activeTab n’affiche aucun avertissement à l’installation, pourtant il peut lire l’URL, le titre et le favicon de l’onglet que vous invoquez, et avec scripting, il peut y exécuter du code.
  • Quatre champs cachés: déclarez tabs et quatre propriétés de Tab apparaissent : url, pendingUrl, title et favIconUrl. La documentation de Chrome les qualifie de sensibles.
  • Même avertissement, pouvoirs différents: la liste des permissions de Chrome attache l’avertissement « Lire et modifier toutes vos données sur tous les sites web » à debugger comme à tabCapture, deux permissions aux rôles très différents.

Sources