Détectez les changements de propriétaire des extensions Chrome installées
(github.com/classvsoftware)- Under New Management est une extension qui vérifie périodiquement si les informations du développeur des extensions de navigateur installées ont changé dans le Chrome Web Store ou Firefox Add-ons
- Si les informations du développeur changent, elle affiche un badge rouge sur l’icône de l’extension afin d’informer l’utilisateur du changement de propriétaire
- Son utilité part du constat que les développeurs d’extensions reçoivent souvent des offres de rachat, et que dans la quasi-totalité des cas, l’acquéreur cherche à exploiter les utilisateurs existants
- L’utilisateur peut ignorer que la propriété d’une extension installée a changé et qu’elle est susceptible d’être compromise ; cet outil lui donne donc l’occasion d’en juger
- Comme les navigateurs imposent des restrictions sur la modification des domaines des marketplaces d’extensions, la vérification des informations du développeur est déléguée au serveur API ExBoost
Détecter les changements de propriété des extensions
- Under New Management vérifie de temps à autre si les informations du développeur des extensions installées ont été modifiées dans le Chrome Web Store ou la boutique Firefox Add-ons
- En cas de changement, un badge rouge s’affiche sur l’icône de l’extension afin que l’utilisateur remarque le changement de propriétaire
- L’objectif est de donner à l’utilisateur la possibilité de porter un jugement éclairé sur les logiciels qu’il utilise
Pourquoi c’est nécessaire
- Les développeurs d’extensions reçoivent constamment des propositions d’achat de leurs extensions
- Le README indique que, dans presque tous les cas, l’acheteur a pour objectif de tromper les utilisateurs existants
- L’utilisateur peut ne pas savoir que la propriété d’une extension installée a changé et qu’elle est désormais susceptible d’être compromise
Installation
- Installation sur Chrome : Chrome Web Store
- Installation sur Firefox : Firefox Add-ons
- Vous pouvez aussi télécharger une prebuilt release, décompresser le fichier
.zipet charger le répertoiredistdans le navigateur
Compiler depuis les sources
- Under New Management utilise Plasmo
pnpm install: installer les dépendancespnpm dev: exécuter en localpnpm build --zip: générer un build de releasepnpm build --target=firefox-mv3: compiler pour Firefox
Pourquoi un serveur externe est nécessaire
- Les navigateurs appliquent des règles particulières à la modification des domaines des marketplaces d’extensions
- Par exemple, il n’est pas possible de définir une règle
declarative_net_requestpourchromewebstore.google.com - La vérification des informations du développeur est donc déléguée au serveur API ExBoost
1 commentaires
Commentaires sur Hacker News
L’ID d’une extension est dérivé de la clé privée téléversée par le développeur lors de la première mise en ligne sur l’App Store, et si un autre
key.pemse trouve ensuite dans le ZIP téléversé, l’ID change.En revanche, s’il n’y a pas de
key.pem, l’ID de l’extension reste inchangé. Donc, si l’ID change, il est possible que le propriétaire ait changé, mais le propriétaire d’origine a aussi pu transmettre la clé privée au nouveau propriétaire. Google n’exige pas la clé privée à chaque téléversement, donc le nouveau propriétaire peut distribuer des modifications sans cette clé.L’écosystème des extensions est intéressant, donc je construis aussi des outils dans ce domaine. J’aimerais créer un dépôt GitHub ciblant certaines extensions, enregistrer chaque mise à jour comme un changement dans le dépôt, puis exécuter un analyseur statique ainsi qu’une analyse dynamique de contamination pour suivre si des entrées utilisateur aboutissent à des sinks dangereux comme
evaloupostMessage: https://github.com/milesrichardson/crxmonPendant la négociation, j’ai dit que je retirerais l’extension et transmettrais tout le code source pour qu’il la distribue lui-même, mais l’autre partie s’attendait à recevoir aussi les identifiants du compte développeur Opera Extensions. J’ai fini par abandonner la transaction, et même si ce type d’outil a une certaine utilité, je suis d’accord pour dire qu’un scanner de malware pour extensions serait encore mieux
Le développeur doit signer l’extension ou le manifeste avec la clé privée, et partager la clé publique ou l’inclure dans le téléversement. Les mises à jour doivent aussi continuer à être signées avec la même clé privée, et tant que la clé ne change pas, on peut vérifier que la même clé privée que celle de la première mise en ligne a été utilisée grâce à la clé publique du premier téléversement. Le fait qu’une clé publique soit incluse dans les téléversements suivants n’est pas essentiel. Si quelqu’un vend ou partage la clé privée, une autre personne peut créer des mises à jour valablement signées, mais c’est le risque inhérent au fait que le signataire ne garde pas sa clé privée secrète. Que ce soit Google ou n’importe qui d’autre, partager la clé privée fait s’effondrer la garantie de provenance de l’extension
Cela dit, je me demande si Google permet réellement à un nouveau propriétaire de distribuer des changements sans clé privée. Le Chrome Web Store est extrêmement tatillon pour des détails mineurs, donc c’est étrange qu’il ne se soucie pas de ça.
J’utilise trois extensions publiées uniquement pour des testeurs, sans mode développeur ni
rsync/robocopy, afin de les installer facilement sur plusieurs machines. Mais ce week-end, Chrome les a toutes désactivées sur une seule machine au motif qu’elles « ne sont pas enregistrées dans le Chrome Web Store et ont peut-être été ajoutées à votre insu ». Impossible de les réactiver de force, et dans le Store elles sont marquées « désactivées » avec un bouton « activer maintenant », mais seul le bandeau disparaît puis réapparaît au rafraîchissement. Ce profil Chrome est pourtant connecté avec un compte autorisé sur liste blanche.Le badge sur la page Chrome Web Store indique que mon compte développeur n’a subi aucune sanction et que son état est bon. Si je n’étais pas connecté avec l’e-mail en liste blanche, je n’aurais même pas pu voir cette page. J’ai donc du mal à croire qu’ils « y prêtent autant attention » tout en autorisant des mises à jour sans clé
Le CWS ne doit jamais changer l’ID d’une extension existante, car l’ID identifie l’extension de manière unique. Si l’ID change, le client Chrome ne peut plus demander les mises à jour de cette extension, et ni le CWS ni Chrome ne prennent en charge la migration des utilisateurs d’une extension vers une autre.
À ma connaissance, si un
key.pemest inclus dans le ZIP après la première soumission, le CWS le rejettera. Si l’ID de l’extension a changé, alors ce n’est pas la même extension. Il est globalement vrai qu’un nouveau propriétaire peut distribuer des modifications sans PEM, mais si le développeur a signé lui-même l’extension soumise au CWS, il ne pourra pas la mettre à jour sans le PEM. Honnêtement, je ne sais pas si cette fonctionnalité existe encore aujourd’hui, mais autrefois c’était un énorme piège : si un développeur perdait la clé privée utilisée pour son téléversement, il perdait aussi toute sa base d’installationPresque tout le monde finira par accepter si le prix est bon, la seule différence étant le montant qu’il faut proposer
Il y a quelques mois, j’ai créé une extension open source gratuite qui permet de passer rapidement les publicités YouTube et je l’ai partagée ici, où elle est montée en première page.
En moins d’une semaine, quelqu’un qui avait commenté mon post Show HN l’a copiée et a fait la promotion de sa propre version sur Reddit ; c’est devenu viral et a dépassé les 300 000 utilisateurs : https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
Je me suis demandé pourquoi il l’avait copiée au lieu d’envoyer une PR à une extension gratuite et open source, puis quelques semaines plus tard il essayait de la vendre sur plusieurs sites pour un montant à cinq chiffres. Il la possède peut-être encore, mais j’ai aussi remarqué que le développeur indiqué sur le Chrome Store n’était plus le même qu’au lancement initial
Je ne comprends pas tout l’historique, mais cette extension est en pratique un JavaScript trivial d’une cinquantaine de lignes. Dire que quelqu’un l’a volée est assez audacieux. L’idée en elle-même n’a pas de valeur, et il est difficile de prétendre qu’elle soit particulièrement nouvelle. Même en supposant que l’autre personne s’en soit inspirée, la chronologie de qui a fait quoi en premier n’est pas si claire
Après, la question de savoir combien de temps YouTube et Chrome la laisseront fonctionner en est une autre, et cela pourrait aussi ne pas leur plaire
« …si le monde entier chante ta chanson / si tous tes tableaux sont accrochés aux murs / souviens-toi que ce qui était à toi appartient désormais à tout le monde / ce n’est ni juste ni injuste / mais tu peux t’y accrocher autant que tu veux / au final, il n’y a que toi que ça rendra anxieux… » — « What Light » de Wilco
C’est vraiment utile, mais comme quelqu’un d’autre l’a dit, ça devrait être une fonction intégrée au navigateur
Je n’ai pas encore examiné le code source en profondeur, mais je me demande si cela notifie automatiquement quand il y a un changement de propriétaire. Pas forcément en temps réel, mais au moins au démarrage, ou bien faut-il lancer manuellement une commande de vérification ?
Ce sujet avait déjà fait parler de lui il y a quelques mois : https://news.ycombinator.com/item?id=36233068
Comme le disait le commentaire le plus haut à l’époque, Firefox et Chrome feraient mieux de modifier leur politique de mise à jour automatique des extensions dans ce genre de situation. Si une extension déclare un changement de propriétaire, la mise à niveau devrait exiger l’approbation de l’utilisateur, et si elle ne le déclare pas, l’utilisateur devrait pouvoir la signaler comme malveillante. Au passage, le titre devrait probablement inclure « Show HN »
J’ai estimé qu’une alerte plus forte serait trop intrusive
Cela réduira la valeur du produit ou de l’entreprise au moment de la vente. C’est favorable aux utilisateurs, mais défavorable au créateur qui doit payer ses factures
Ce n’est pas un sujet de plaisanterie
J’ai possédé pendant plusieurs années une extension Chrome open source assez populaire, et l’ensemble des dons n’a même pas couvert un mois de café
En revanche, j’ai reçu de nombreuses offres — avec des montants délirants — pour vendre l’extension à des fins manifestement malveillantes, parfois même annoncées ouvertement comme telles. Je les ai toutes refusées, mais espérer que la moralité du développeur d’origine soit le seul mécanisme de sécurité et de confidentialité dans ce genre de situation n’est pas une position raisonnable
Je comprends assez bien l’objectif et aussi les limites techniques, mais le fait d’envoyer la liste de toutes les extensions de l’utilisateur à un réseau publicitaire centré sur les extensions paraît un peu suspect.
Il est indiqué que, comme le navigateur applique des règles spéciales aux modifications de domaines de places de marché d’extensions comme
chromewebstore.google.com, la vérification des informations du développeur est déléguée au serveur API d’ExBoost.https://www.extensionboost.com/
ExBoost se présente comme un réseau collaboratif d’extensions de navigateur qui veulent davantage d’utilisateurs et d’avis. Le principe consiste à insérer un emplacement ExBoost dans l’interface de l’extension pour afficher la promotion d’extensions similaires ou des demandes d’avis.
Si on regarde le résultat de l’API pour une extension installée, on y trouve des métadonnées sur le développeur. J’ai essayé l’API Chrome
chrome.management.get(id), mais elle ne renvoie pas ces informations, et il ne semble pas non plus y avoir de moyen de récupérer programmatiquement le contenu demanifest.json. Donc, pour faire ce que l’extension essaie actuellement de faire, une source externe est effectivement nécessaire.https://github.com/classvsoftware/under-new-management/blob/...
https://api.extensionboost.com/v1/developer?extension_ids=gh...
Le message me demandait d’intégrer leur code dans mon extension et disait en substance : « si tu montres la mienne, je montrerai la tienne ; coût zéro, tout le monde y gagne ». Ça m’a paru louche, donc je l’ai classé comme spam, et ça ne m’a pas semblé différent des autres spams que je recevais d’escrocs.
Pour les extensions Firefox, il existe le programme d’extensions recommandées de Mozilla, et il est indiqué qu’avant d’y être incluses elles passent par un examen technique strict réalisé par des experts sécurité de Mozilla : https://support.mozilla.org/en-US/kb/recommended-extensions-...
Cela dit, à la seule lecture du document d’aide, il n’est pas clair si toutes les mises à jour sont examinées avant publication. Si c’est le cas à chaque fois, cela réglerait en partie ce problème pour les extensions populaires, mais je me demande aussi quels délais cela introduit lorsqu’une mise à jour de sécurité urgente est nécessaire.
Ma politique personnelle actuelle est de n’autoriser l’exécution sur tous les sites et tous les onglets qu’aux extensions sélectionnées de ce type.
Une structure où même une organisation très populaire ou très connue peut être bannie si elle enfreint les règles à répétition ou essaie de contourner les mécanismes de la marketplace.
Dans les cas vraiment malveillants, lors du transfert d’une extension on vend souvent directement les identifiants du compte développeur Google, et ce type de cas ne peut donc pas être détecté.
J’ai installé adblock il y a très longtemps et je l’aimais beaucoup.
Quand j’ai acheté une nouvelle machine et dû le réinstaller, j’ai regardé les permissions pour la première fois, et c’était à en perdre la tête. Il est logique que, pour bloquer les publicités, il doive pouvoir voir ce que je vois, mais je n’y avais jamais vraiment réfléchi sérieusement.
Maintenant j’utilise Pi-hole et plus aucune extension.
Cela dit, c’est bien que ceux qui le souhaitent aient le choix, et chacun a un profil de risque et des préoccupations différents.
Certaines extensions sont open source et dignes de confiance, mais beaucoup ne le sont pas, et les gens semblent avoir du mal à les vérifier.
Il suffit de fournir une liste de blocage et le navigateur effectue lui-même le blocage. Je ne sais pas si c’est aussi possible dans Firefox : https://developer.apple.com/documentation/safariservices/cre...
Si j’étais un acheteur d’extensions malveillant, je me dirais qu’il suffit de conserver le nom du développeur tel quel pour éviter ce genre de détection. Ou bien le Chrome Extension Store gère-t-il strictement les noms de développeurs ?
Par exemple, un acteur étatique malveillant pourrait proposer des dizaines de millions de dollars à l’auteur d’uBlock pour obtenir un large accès aux navigateurs. Je ne sais pas si ce serait économiquement rationnel, mais des extensions plus de niche seraient sans doute des cibles bien moins coûteuses.
Je me demande si ce problème est plus grave dans Chrome que dans les autres navigateurs
La seule extension de navigateur que j’utilise est HonorLock, un logiciel de surveillance d’examen, et je suis obligé de l’utiliser. L’extension est exclusive à Chrome, donc j’utilise parfois Chrome à cause de HonorLock. Si j’ouvre le lien d’installation dans Safari, on m’indique d’installer Chrome : https://app.honorlock.com/install/extension
Je me demande s’il existe des caractéristiques propres aux extensions Chrome qui permettent le cas d’usage de HonorLock tout en rendant l’outil de cet article plus utile