1 points par GN⁺ 2025-07-13 | 4 commentaires | Partager sur WhatsApp
  • La mise à jour MV3 de Chrome supprime l’autorisation webRequestBlocking afin de réduire les capacités des bloqueurs de publicité existants
  • L’auteur a découvert en 2023 un bug permettant de contourner webRequestBlocking même dans l’environnement MV3
  • Ce bug provenait de la structure fragile des bindings JavaScript et de la présence de vieux morceaux de code conservés tels quels
  • En manipulant l’ID d’instance WebView, il était possible de contourner la vérification des autorisations et d’utiliser les fonctions de blocage même dans l’environnement MV3
  • Un correctif a désormais été appliqué, et cette méthode de contournement ne fonctionne plus

MV3 et l’évolution des bloqueurs de publicité

  • Chrome supprime progressivement les extensions MV2 et poursuit la transition vers MV3
  • MV3 retire l’autorisation webRequestBlocking, empêchant ainsi les bloqueurs de publicité de bloquer dynamiquement les requêtes réseau par script
  • À la place de cette autorisation, l’API declarativeNetRequest a été ajoutée, mais elle n’offre pas le même niveau de flexibilité
  • Ce changement a entraîné une forte baisse des performances des bloqueurs de publicité

Les limites de l’architecture des bindings JavaScript

  • Le cœur de Chrome est développé en C++, mais les extensions fonctionnent en JavaScript, et les API d’extension sont également accessibles via des bindings JS
  • Jusqu’en 2015–2016, Chrome injectait des fichiers JS (modules de binding d’extension) dans les pages afin d’initialiser et de valider les API
    • Cette méthode était vulnérable à l’override des fonctions globales JS et des prototypes, ce qui a provoqué plusieurs bugs Universal XSS
  • Google a ensuite migré les principaux bindings vers le C++, mais certains fichiers de bindings JS subsistent encore
  • Encore aujourd’hui, certaines API comme chrome.webRequest reposent sur cette architecture de bindings JS

Contournement via la classe d’événements de requête web

  • En MV2, le blocage des requêtes web pouvait être implémenté avec le code suivant

    chrome.webRequest.onBeforeRequest.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking'])
    
  • En MV3, l’option blocking est interdite, ce qui rend le blocage normal impossible

  • Cependant, il est possible de créer un objet d’événement arbitraire via le .constructor de l’événement webRequest

  • En interne, une classe wrapper spéciale des bindings JS gère cet objet d’événement

  • En renseignant opt_webViewInstanceId, l’un des paramètres du constructeur, il était possible de contourner la logique d’autorisation réservée aux applications de plateforme et d’échapper au contrôle du droit de blocage

    let WebRequestEvent = chrome.webRequest.onBeforeRequest.constructor
    let fakeEvent = new WebRequestEvent("webRequest.onBeforeRequest", 0, 0, 0, 1337)
    
    fakeEvent.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking'])
    
  • Le mécanisme était à l’origine conçu pour être utilisé uniquement par les applications de plateforme, mais la validation insuffisante de l’ID WebView permettait son exploitation par des extensions ordinaires

Résultats et correctif de sécurité

  • Cette vulnérabilité rendait concrètement possible le développement d’un bloqueur de publicité complet même dans l’environnement MV3
  • L’auteur a signalé ce bug à Google en 2023, et il a été corrigé dans Chrome 118 par une vérification correcte de la possession des autorisations WebView
  • Aucune prime n’a été versée, en raison de la nature structurelle du problème, qui permettait uniquement un contournement d’autorisation sans exposition supplémentaire de données
  • Ce cas montre que quelques dizaines de lignes de code modifiées peuvent neutraliser une mise à jour de sécurité d’un géant technologique

Conclusion et références

  • Le bug a désormais été corrigé et ne fonctionne plus
  • Parmi d’autres cas intéressants de vulnérabilités liées aux extensions Chrome, il existe aussi un problème ayant réellement reçu un numéro CVE et une récompense de 10�00 $ (voir un autre billet de blog)

4 commentaires

 
hhcrux 2025-07-14

Je pense qu’après cette mise à jour, les éditeurs d’adblock ont sans doute encore augmenté leurs revenus.
Les applications autonomes qui bloquent carrément au niveau du réseau n’étant utilisables qu’en version payante, elles ont probablement dû se vendre plutôt bien.

 
crawler 2025-07-14

Publier une faille devenue totalement dénuée d’intérêt après deux ans, tout en prenant soin de préciser qu’elle n’a pas été payée… personnellement, je ne trouve pas ça très classe.
Mais bon, il faut sans doute aussi écrire ce genre de choses sur son blog pour prouver sa valeur, non ?
Honnêtement, j’aimerais moi aussi apprendre cet état d’esprit et écrire beaucoup plus d’articles sur mon blog.

 
ndrgrd 2025-07-14

Utilisez simplement Firefox. Il est devenu bien plus rapide ces 1 à 2 dernières années, donc ce n’est pas un mauvais choix.
J’utilise principalement Firefox depuis des années et je le compare de temps en temps à Chrome ; surtout récemment, j’ai l’impression que Firefox est devenu tout à fait utilisable au quotidien.
Même les sites web qui ignoraient les standards du Web, comme ceux des banques coréennes, ont été beaucoup corrigés récemment, donc la plupart fonctionnent désormais bien aussi avec Firefox.
Et la personnalisation est bien plus facile avec Firefox.

 
GN⁺ 2025-07-13
Avis Hacker News
  • Même si j’aimerais essayer Firefox, les bugs occasionnels de chargement de certains sites, ainsi que l’impossibilité d’installer des PWA (Progressive Web Apps), restent les principaux freins. Chrome et les navigateurs qui en dérivent prennent cette fonctionnalité en charge depuis longtemps, et je ne comprends pas vraiment pourquoi Firefox ne l’a toujours pas implémentée. J’ai bien trouvé une extension tierce (PWAs for Firefox), mais j’hésite à l’utiliser pour des raisons de confidentialité

  • Même s’il existe un moyen de contourner le comportement de Google, je ne pense pas que ce soit la bonne direction. Si les gens ne sont pas d’accord avec ce que fait Google, la seule bonne réponse est d’abandonner Chrome ainsi que tous les navigateurs basés sur Chromium. Il est important d’affaiblir le monopole de Google et de lui retirer son emprise sur l’orientation future du web

    • Je pense que les monopoles d’aujourd’hui existent parce que tout le monde a oublié les leçons qu’on aurait dû tirer d’IE. C’est le résultat d’un monde où l’on n’apprend pas les standards du web et où l’on distribue Chrome avec son application
    • Ce n’est pas le sujet principal de l’article, et l’article précise en réalité que cette méthode de contournement a été corrigée dans Chrome 118
    • J’ai envie de me moquer du « il faut porter un coup au monopole » en demandant si ça a déjà réellement changé quoi que ce soit
    • En pratique, cela n’arrivera probablement pas
    • Beaucoup pensent qu’il ne suffit pas de passer à un navigateur Chromium dont les fonctions de tracking Google ont été retirées, mais j’ai justement l’impression que c’est le cadre narratif que Google préfère. Firefox est clairement différent de Chrome et il n’est pas si facile d’y migrer depuis Chrome. En revanche, Brave, Chromium personnalisé, Vivaldi, etc., offrent pratiquement la même expérience que Chrome sans le tracking Google. L’argument selon lequel « Google contrôle encore Chromium donc ce n’est pas acceptable » me semble justement être le genre de FUD (peur, incertitude et doute) qu’il serait dans l’intérêt de Google de diffuser
  • Le vrai contournement, c’est d’utiliser Firefox. uBlock Origin fonctionne le mieux sur Firefox
    uBlock Origin works best on Firefox

    • J’ai toujours utilisé Firefox, donc je n’avais même pas conscience que cela se produisait. C’est en voyant que ma femme voyait des pubs sur YouTube que je m’en suis rendu compte, alors que je lui avais installé uBlock il y a longtemps
  • Je doute aussi que MV3 soit réellement plus sûr que MV2 selon Google. Passer à MV3 ne semble pas renforcer fondamentalement la sécurité

    • Franchement, je suis surpris que quelqu’un y croie vraiment. L’article lui-même commence par un conflit d’intérêts assez évident. Laisser une extension savoir quels sites visite l’utilisateur et quelles requêtes sont faites crée effectivement un environnement vulnérable. Malgré ça, je fais davantage confiance à uBO qu’aux régies publicitaires et aux collecteurs de données, donc je continue simplement à l’utiliser comme ça
  • À propos du cas où quelqu’un a trouvé une méthode pour contourner les adblockers et l’a signalée à Google, certains ont réagi par un « il l’a trouvée puis est allé immédiatement la dénoncer à Google, génial »

    • En réalité, si des adblockers avaient commencé à l’utiliser, Google l’aurait corrigée immédiatement et le développeur n’en aurait tiré aucun bénéfice. L’ironie, c’est qu’au final il n’aurait rien gagné de toute façon
  • L’OP a signalé à Google un « problème » qui n’en était pas un, empêchant ainsi les développeurs d’extensions de contourner les limitations de MV3. Espérons que cela valait bien 0 $

    • Ce type de contournement aurait de toute façon été supprimé par Google en moins d’une journée. L’OP aurait même pu recevoir une récompense financière, donc je pense que ça valait le coup. Je n’ai pas envie de le blâmer
    • Je ne suis pas d’accord avec cette conclusion. Toute la responsabilité revient à Google. Même si l’OP n’avait pas signalé le problème, si un autre adblocker avait utilisé cette méthode plus tard, Google l’aurait interdite très vite. Ils auraient peut-être même pris une mesure extrême comme retirer complètement l’extension du Web Store
    • Si un adblocker réellement utilisé par les gens avait implémenté cette méthode, Google l’aurait évidemment bloquée immédiatement. Ce n’était pas une sorte de cheat code exploitable indéfiniment
    • Je pense pareil. L’OP a travaillé gratuitement pour une grande entreprise et, au final, a rendu le web plus pénible à utiliser. La raison serait quoi… « la sécurité », j’imagine. Formidable
  • Depuis que j’ai commencé à utiliser Brave, Chrome ne me manque plus du tout
    Brave

    • Au contraire, je trouve Brave encore plus pénible que Chrome. Au-delà des problèmes liés à Brendan Eich, il y a trop de déchets intégrés au navigateur : des fonctionnalités arbitraires de toutes sortes, un blocage des pubs (Brave Shields) qu’on ne peut pas complètement désactiver, des éléments liés aux cryptomonnaies, un bouton de téléchargement de web apps impossible à désactiver, une interface impossible à nettoyer, etc.
    • Brave reste malgré tout une entreprise à but lucratif, et il est difficile de ne pas rejeter un produit bourré par défaut de fonctions inutiles. Cela dit, il existe pas mal de contenus de conseils pour l’alléger via les réglages, comme « Comment mettre Brave au régime »
    • Le moteur reste Blink au final, donc ce n’est qu’un changement d’apparence. Je n’ai jamais vu de navigateur Blink continuer à maintenir Manifest V2. Même s’il en existait un, ce serait un soft fork qui ne tiendrait pas longtemps
    • Brave reste basé sur Chromium, donc c’est en réalité presque la même chose que Chrome. Manifest V3 finira forcément par s’y appliquer aussi
    • Il existe aussi un point de vue critique disant qu’il ne faut pas utiliser Brave browser
      Stop using Brave browser
  • À l’affirmation selon laquelle « un adblocker a absolument besoin de webRequestBlocking, et comme Google gagne de l’argent avec la pub, le retrait de cette fonction est clairement intentionnel », certains répondent que « ce n’est pas vrai, n’importe qui peut utiliser uBlock Origin Lite sur Chrome et manifest v3, les performances sont bonnes et je ne vois pas de différence avec uBlock Origin classique. Tout est filtré en C++, donc c’est bien plus rapide. Il y a bien une limite sur le nombre maximal de règles, mais pour l’instant cela reste tout à fait gérable »

    • Cela dit, Lite étant Lite, ses possibilités restent limitées. Ce n’est pas à l’origine un adblocker identique, donc ce n’est pas exactement la même chose
  • En dehors de mon ordinateur portable professionnel, je n’ai aucune raison d’utiliser Chrome et je continue à utiliser Firefox au quotidien. Cela dit, c’est dommage de ne plus pouvoir utiliser uBlock Origin dans le cadre du travail de navigation web (recherche, documentation, etc.), car cela m’aidait beaucoup

  • Si on veut simplement un contournement, il suffit d’installer Firefox

    • Je trouve que Firefox n’est pas terrible, ni comme navigateur web, ni comme base. C’est dommage que Zen n’utilise pas Chromium