2 points par GN⁺ 2023-08-15 | 1 commentaires | Partager sur WhatsApp
  • Little Rat est une petite extension Chrome qui surveille les appels réseau d’autres extensions Chrome et les bloque de manière optionnelle
  • La détection et le blocage du trafic d’autres extensions ne sont possibles qu’en activant le flag extensions-on-chrome-urls dans chrome://flags/#extensions-on-chrome-urls ou en lançant Chrome avec --extensions-on-chrome-urls
  • L’installation manuelle se fait en téléchargeant le ZIP depuis GitHub, en le décompressant, en activant le mode développeur dans les extensions Chromium/Chrome, puis en utilisant la procédure Load unpacked extension sur le répertoire little-rat-main

1 commentaires

 
GN⁺ 2023-08-15
Avis de Hacker News
  • J’aimerais que ce soit une fonctionnalité native de Firefox ou Chrome, plutôt qu’une extension tierce. Comme ça, le taux d’adoption serait suffisant pour que les autres navigateurs s’y intéressent aussi ; j’aimerais pouvoir autoriser une extension donnée uniquement à faire des requêtes GET vers des URL statiques prédéfinies, sans possibilité de modifier les en-têtes.
    Cela permettrait les mises à jour de données tout en réduisant le risque d’exfiltration. Certaines extensions fonctionnent uniquement dans le navigateur local et n’ont donc pas du tout besoin d’accès réseau. Cela dit, si elles peuvent modifier le source de la page, elles peuvent contourner cela pour transmettre des données ; c’est sans doute pour ça que les navigateurs ne le font pas. Malgré tout, je pense qu’il vaut mieux essayer que d’abandonner et de laisser ça aux extensions Chrome.

    • Même rien que pour observer, c’est possible. Il faut ouvrir le débogueur du navigateur, pas celui de la page courante.
      C’est presque la même procédure que pour inspecter l’UI : activez le débogage à distance puis lancez la Browser Toolbox : https://superuser.com/questions/1608096/how-to-inspect-firef...
      C’est aussi pratique pour découvrir ce qu’il faut mettre dans un fichier CSS user-chrome quand on veut modifier l’affichage des onglets au-delà d’un simple thème. En revanche, utiliser user-chrome CSS est un peu pénible.
      Pour faire apparaître les requêtes réseau des extensions, j’ai dû passer en multi-process mode, ce qui est globalement logique.
      Par exemple, uBlock récupérant une liste de blocage arbitraire sur laquelle j’ai cliqué pour tester : https://i.imgur.com/wBYbBM2.png
      Firefox lui-même mettant à jour en arrière-plan les listes safe-browsing : https://i.imgur.com/JYxWwjW.png
    • Les requêtes GET peuvent aussi exfiltrer des données via le chemin et les paramètres de chaîne de requête. Même en bloquant cela, on peut créer une communication façon morse qui suggère une activité par le timing ou la fréquence ; avec suffisamment de requêtes, on peut facilement transmettre des mégaoctets de données.
    • À mon avis, si une extension crée une requête HTTP qui ne se contente pas de répéter une URL déjà présente dans la page, le navigateur devrait afficher une notification toast avec le corps de la requête présenté de façon lisible.
      Une extension bien conçue ne déclencherait des notifications que rarement, et une extension ayant besoin d’un serveur le ferait au moment où l’utilisateur s’attend à ce qu’elle communique avec ce serveur. Une extension qui envoie des frappes clavier ou des données suspectes serait très facile à repérer.
    • De mémoire, les extensions ne peuvent pas accéder à des URL qui ne sont pas indiquées dans la section des permissions du manifeste. Je crois que Firefox affiche ces URL dans la fenêtre de confirmation des permissions.
      Cela dit, on peut mettre des jokers dans les URL, et il me semble qu’il existe aussi une valeur spéciale signifiant toutes les URL. Malgré tout, peu d’extensions devraient avoir besoin de ce genre de permission.
    • Si les éditeurs de navigateurs ne proposent pas ce genre de fonctionnalité, c’est probablement parce que, quelle que soit la protection mise en place, elle est facile à contourner.
      Par exemple, même si l’extension ne peut pas créer elle-même de requêtes, si elle a le droit de modifier le DOM d’une page web, il existe de nombreuses façons de tromper la page pour qu’elle envoie la requête à sa place.
  • Cette extension n’est pas très facile à installer, donc ce serait bien d’ajouter une capture d’écran montrant les événements réseau réellement capturés. La capture actuelle masque la fonctionnalité la plus intéressante.

    • Ouvrez Google Chrome, menu à trois points en haut à droite → Extensions → Gérer les extensions → activez Mode développeur en haut à droite → bouton “Load Packged” en haut à gauche → chargez le répertoire .zip décompressé.
      Ensuite, revenez à l’écran normal du navigateur, cliquez sur l’icône d’extension en forme de pièce de puzzle à droite de la barre d’adresse, puis sur la petite épingle à côté de Little Rat : l’extension sera installée et visible dans la liste des icônes d’extensions.
  • Sympa. Honnêtement, je suis surpris que ce soit possible.
    Je ne sais pas exactement quelles données fournissent ces API, mais si une extension peut accéder aux requêtes d’une autre extension, cela ne pose-t-il pas des problèmes de sécurité pour des extensions de gestionnaire de mots de passe ou des extensions utilisant des jetons d’authentification ?

  • Bien. J’ai l’impression que ce genre de chose devrait exister sous forme d’URL chrome://.

    • Comme les extensions représentent un risque aussi important pour la sécurité et la vie privée, la première question qui m’est venue est : pourquoi ce n’est pas une fonctionnalité native de Chromium ?
  • Ça a l’air bien, mais je me demande s’il est prévu un portage vers Firefox.
    Quelqu’un connaît-il une alternative qui fasse la même chose dans Firefox ?

  • Je l’essaierai quand ce sera sur le Chrome Store.

    • Il utilise declarativeNetRequest.onRuleMatchedDebug[0], qui semble être réservé au débogage, donc je me demande si ce sera accepté sur le Chrome Web Store.
      0: https://github.com/dnakov/little-rat/blob/f0b9b6be39af9fe7f4...
    • Allez dans Releases, faites un clic droit sur le fichier crx pour l’enregistrer, puis allez dans Extensions de Chrome et faites un glisser-déposer du fichier crx.
  • Pourquoi n’est-ce pas sur le Chrome Store ?

    • C’est actuellement en cours d’examen. C’est parce que ça utilise chrome.declarativeNetRequest, une API qu’uBlock utilise aussi.
  • C’est propre, mais il faudrait traiter cette partie avec plus de prudence : https://github.com/dnakov/little-rat/blob/main/popup.js#L36
    Je n’ai pas envie de devoir m’inquiéter qu’une autre extension puisse injecter une XSS ici avec une requête, un ID ou un nom manipulé.

    • Très bonne remarque, mais la politique de sécurité du contenu n’autorise pas unsafe-inline et les ID d’extension sont générés automatiquement par Chrome.
  • Le simple fait qu’une extension n’effectue pas d’appels réseau ne prouve pas qu’elle est sûre. Elle pourrait mettre en cache des données que l’on souhaite garder privées, puis les envoyer périodiquement.