世界を動かす技術を、日本語で。

Googleの大規模なアンチ広告ブロックアップデートを回避する方法

2025年7月13日原文(0x44.xyz)

概要

  • Google ChromeManifest V2 (MV2)から Manifest V3 (MV3)へ移行
  • MV3adblocker などの拡張機能に影響
  • webRequestBlocking 権限の廃止とそのバグ
  • JavaScriptバインディング の脆弱性利用例
  • バグ報告と 修正対応、報酬の話

Chrome Manifest V3とAdblocker問題

  • MVManifest Version の略称
  • MV3 導入により、拡張機能の webRequestBlocking 権限が廃止
  • webRequestBlocking は、リクエスト内容に応じて 動的に通信をブロック する機能
  • adblocker はこの権限に依存しており、MV3で 機能制限 を受ける
  • Google が広告収入主体であるため、意図的な変更と見る声も

Chrome拡張APIのJavaScriptバインディングの歴史

  • Chrome本体C++ で記述
  • 拡張機能は JavaScript で記述し、API呼び出しもJS風
  • かつては「 extension binding modules」というJSファイルをページに注入
  • グローバル関数やプロトタイプの 上書きXSS脆弱性 が多発(2015〜2016年)
  • Google はその後、APIバインディングの多くを C++ へ移行
    • ただし一部は現在も JavaScriptバインディング を使用

webRequest APIの特殊性とバグ概要

  • chrome.webRequest APIは今も JavaScriptバインディング 利用
  • 本来、MV3では blocking オプションが使えず、 cancel: true は無効化
  • しかし、 webRequestEvent のラッパークラスの constructor が公開状態
  • 独自イベントを生成可能
    • 例:let fooEvent = new WebRequestEvent("foo")
  • opt_webViewInstanceId パラメータを悪用し、 webRequestBlocking の権限チェックを回避可能
    • 本来は Platform Apps 用の仕組み
    • イベント名やIDを偽装し、 blocking 機能を利用できるバグ

バグの実例コード

  • 偽装イベント 生成例
    • let fakeEvent = new WebRequestEvent("webRequest.onBeforeRequest", 0, 0, 0, 1337)
    • fakeEvent.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking'])
  • Platform Apps は2020年に廃止済みだが、2025年時点でもコードが残存

バグの影響と修正対応

  • このバグを使えば、 MV3 でも adblocker が完全動作可能
  • 報告者は2023年に Google へ報告、 Chrome 118 で修正
    • opt_webViewInstanceId 利用時に WebView権限 チェックを追加
  • 報酬は 0ドル (セキュリティ上の重大性が低いと判断)
  • 脆弱性 の本質は、 古いコード の残存によるもの

総括・教訓

  • 数行のコード で大規模なアップデートの回避が可能な事例
  • 古い設計レガシーコード のリスク
  • 興味深い脆弱性体験談として紹介

参考・関連情報

  • さらに興味があれば、同年に発見された Chrome拡張バグ (CVE付き・1万ドル報酬)の記事も参照推奨

Hackerたちの意見

で、結論はどうなるの?別のChromeベースのブラウザを使ってMV3を避けることはできるのかな?これが起こった後、プライバシーに関してはどうなるんだろう?

僕が読んだ限りでは、MV2を維持することも考えられるみたい。他のChromiumベースのブラウザがこの問題を抱えていなければいいけど、時間が経つにつれてYouTubeはMV3がないブラウザをサポートしなくなるだろうね。まだしばらくは大丈夫だと思うけど。

このブログポストでは、MV3の制限を回避するためにMV2でしか利用できない重要な機能にアクセスできるワークアラウンドを発見したことが書かれてる。このワークアラウンドは2023年に修正されて、Googleがセキュリティの脆弱性とは見なさなかったため、$0の支払いになった。つまり、uBO(MV2)は今日、コンピュータを再起動したら動かなくなったってことかな。

彼らはそれがセキュリティの問題ではないと決めたんだけど、正直、僕もそう思う。だって、拡張機能に既に持っているデータ以上のアクセスを与えなかったからね。つまり、MV3はMV2よりも実際には安全じゃないって認めてるってこと?

誰かが本気で彼らを信じているとは思えないよ。このアーティクルは明らかな利害の対立から始まってるしね。もちろん、拡張機能に自分が訪れるウェブサイトやリクエストを知らせるのは不安定なライフスタイルだよ。でも、僕はuBOを広告会社や彼らのデータ収集者よりも信じてるから、まだ使ってる。

OPはGoogleに無害な「問題」を修正させたみたいで、それはアドオン開発者がMV3の制限を回避するために使えるものだった。$0の価値があったといいけど。

うん、僕もそう思った。OPはメガコープのために無償で働いて、ウェブをちょっと悪化させたって感じかな、「セキュリティ、かな?」って?お疲れ様。

この結論には賛成できないな。GoogleはMV3とその制限に完全に責任がある。責任を彼らから逸らす理由なんてないよ。ちょっと考えてみてよ:もしOPが報告してなかったら、どうなってたと思う?他のアドブロッカーが後で見つけて使ったとしても、Googleはこれを削除してたはず。もしかしたら、(悪用した)拡張機能もChrome Web Storeから削除されるかもね。

本当に?Googleがそんなにバカだと思ってるの?実際に使われているアドブロッカーが実装したら、すぐにパッチが当てられるよ。これを一度悪用してずっと得られるなんてことはないからね。

アドブロッカーをMV3で動かす方法を見つける >Googleにチクる いいね、ありがとう!

まあ、彼を擁護するなら、最初のアドブロッカーが使った後すぐに修正されてたはずだし、結局何も得られなかったんだよね。あ、待って、何も得られなかったのはその通りか ;)

なんてクズなんだ。

Hacker Newsで議論の続きを見る