TOOLPIPO LAB CRX

Chrome拡張機能の「すべてのサイトのデータを読み取り、変更」とは?

どのページに、いつアクセスできるのか。権限の指定が違う4つの拡張で比べました。

Aはサイトアクセス宣言なし、Bは呼び出したタブに一時アクセス、Cは127.0.0.1、Dは広範なURLパターン

結論

全サイトへのアクセス権限は、多くのページの内容を読んだり変更したりする許可です。権限の記載だけでは、実際の送信や悪意を断定できません。

検証概要

検証日
検証条件
自作ファイル・条件・実測結果は本文に掲載

拡張機能を追加するとき、「すべてのサイト」と表示されると気になります。

多くのサイトで、ページの内容を読み取ったり、書き換えたりする許可を求めています。

これは「できること」の説明です。すでにページを読み取ったり、データを送信したりしたという意味ではありません。

権限だけでは悪意を判定できません。Chromeウェブストアの公式ヘルプも、警告が出るから危険とは限らないと説明しています。今回は拡張の安全性を判定するのではなく、アクセスできる範囲の違いを比べます。

まず、今の拡張に許可している範囲を確認する

  1. Chromeの右上メニューから「拡張機能」→「拡張機能を管理」を開く。
  2. 対象の拡張で「詳細」を選ぶ。
  3. サイトアクセスを確認し、必要に応じて「クリックされた場合のみ」「特定のサイト」「すべてのサイト」から選ぶ。

使わないサイトまで許可しているなら、範囲を狭められるか確認してください。拡張の用途に合う権限かどうかも判断の手がかりになります。

Chrome公式ヘルプによると、表示できる設定は拡張によって異なります。この設定はサイトへのアクセスを制限するもので、VPN・プロキシなど別の仕組みの権限まで一括で止めるものではありません。

4つの拡張で、アクセス範囲を比べる

違いを切り分けるため、ToolPipoで検証用の拡張を4つ作りました。どれもManifest V3・バージョン1.0.0です。まず、権限が書かれた設定ファイルmanifest.jsonを読み比べました。

Aはサイトアクセス宣言なし、Bは呼び出したタブに一時アクセス、Cは127.0.0.1、Dは広範なURLパターン
図1:manifestで求める範囲の違い。実際の許可はChromeの設定にも左右されます。 スマホでは図を横にスクロールできます。
設定ファイルに書かれた権限と実行のきっかけ
拡張ページへのアクセス設定ファイルの指定実行のきっかけ
A:サイトアクセスなし要求なしstorageのみページに処理を入れない
B:一時アクセス操作したタブに一時的に許可activeTab、scripting拡張のアイコンを押す
C:特定サイト指定したサイトhttp://127.0.0.1/*対象ページを開く
D:広い範囲多くのサイト<all_urls>対象ページを開く

Bはアイコン操作で処理を入れる作り、C・Dはページを開くと自動で処理を入れる作りです。C・Dの処理内容は同じにし、サイトの指定だけを変えました。バックグラウンドの共通処理に外部通信や保存はありません。

ページを開くと、指定した範囲だけで処理が動いた

拡張がテスト用の文字列を読み取ったら、ページに確認用の印を付けるようにしました。その印が付いたかで、処理が動いたことを確かめています。

Cは指定したホストだけ、Dは試した3条件すべてで印が付きました。

Aと、アイコンを押す前のBには付きませんでした。

ページ内の文字列を読み取り、確認用の印が付いたか
拡張127.0.0.1localhost127.0.0.1の別ポート
A:サイトアクセスなし付かない付かない付かない
B:アイコン操作前付かない付かない付かない
C:特定サイト付いた付かない付いた
D:広い範囲付いた付いた付いた

注目したいのはCです。127.0.0.1とlocalhostはどちらも同じPCにつながりますが、サイトの指定では別のホスト名として扱われます。一方、ポート番号だけを変えたページには印が付きました。これは、ポートを省略した指定が全ポートに一致するChromeのURLパターンの仕様に沿った結果です。

Bでは、拡張のアイコンを押した後の動作は検証していません。

表は操作前の結果です。「一時アクセスを許可した後も読めない」という意味ではありません。

検証にはPlaywright付属のChromium 151.0.7922.34を使用し、拡張を1件ずつ読み込みました。読み取り対象はSYNTHETIC_PAGE_VALUE_7419という文字列で、同じ値がHTMLのdata属性に付くことを確認しています。C・Dはローカルホストかつ専用ページでだけ読み取りを行う作りです。実在サイトにはアクセスしていません。

activeTabは、呼び出したタブへの一時的な許可

activeTabは、拡張のアイコンを押すなどの操作で、今のタブへのアクセスを一時的に許可する仕組みです。公式仕様では、別のオリジンへの移動や、タブを閉じると許可が失われます。オリジンとはURLの方式・ホスト名・ポート番号の組み合わせで、この3つが同じページへの移動なら許可は続きます。

activeTabは呼び出し後に同じオリジン内で継続し別オリジン移動で終了。host permissionは宣言範囲と利用者設定に基づく
図2:activeTabの許可が続く条件。ここは実測ではなく、Chrome公式仕様の図解です。 スマホでは図を横にスクロールできます。

<all_urls>はこれとは違い、広いURL範囲を指定します。ただし、chrome://などの制限ページや、追加の許可が必要なローカルファイルまで無条件に読めるわけではありません。なお、activeTab自体はインストール時の権限警告を出しませんが、ほかの権限による警告は出ることがあります。

設定ファイルの権限を詳しく確認する

permissionsには使う機能、host_permissionsにはアクセス先のサイトを指定します。content_scripts.matchesは、ページに自動で処理を入れる対象です。後の2つは、どちらも権限警告に関係する指定です。

permissionsはAPI権限、host_permissionsはサイト範囲、content_scripts.matchesは自動挿入先、optionalは実行時に追加要求する宣言
図3:機能の権限、サイトの範囲、自動実行の対象は別の項目です。 スマホでは図を横にスクロールできます。

ページの文字や要素を読み書きするコードをcontent scriptと呼びます。C・Dはこれを自動で入れる方式です。BはScripting APIを使い、アイコン操作で入れる方式です。このAPIには、scriptingの権限に加え、対象サイトへの許可かactiveTabの一時許可が必要です。

サイトへのアクセスとは別に確認したい権限
権限主な対象
storage拡張用のデータ保存。Webページ全般を読む権限ではない
scriptingページへのコードやCSSの挿入。対象サイトへの許可も必要
tabsタブのURLやタイトルなど。ページ本文の読み取りとは別
cookiesCookieの操作。対象サイトへの権限も必要
history閲覧履歴の操作
clipboardReadクリップボードの読み取り

tabsの権限が関係するのは、url・pendingUrl・title・favIconUrlへのアクセスです。タブの作成など、tabs権限なしでも使える操作があります。ほかの権限はChromeの権限一覧、Cookieの条件はCookies APIの仕様で確認できます。今回の4件はcookies・history・clipboardReadを要求していません。

optional_permissions・optional_host_permissionsは、使用時に追加の許可を求めるための指定です。設定ファイルに書かれていても、許可済みとは限りません。今回の4件にはこの指定を入れていません。

検証に使ったZIPをダウンロードする

4件ともToolPipo製の検証用拡張です。Chrome Web Storeで公開されている拡張ではありません。

インストールせず、ZIPを展開してmanifest.jsonを読むだけでも比較できます。各ZIPのREADME.txtに内容を記載しました。外部へデータを送る処理は含みません。

ZIPの容量と、ファイルを照合するためのSHA-256先頭16桁
ZIP容量(bytes)SHA-256先頭16桁
A:サイトアクセスなし974ce31a71ec0ceaf05
B:一時アクセス1,849707f1b3683094004
C:特定サイト1,685dd4643f1cea996b8
D:広い範囲1,665c6beb31af82278a3

権限の広さと、実際の動作は別

設定した範囲によって、自動で処理が動くページは変わりました。ただし、権限の指定だけを見ても、拡張がどんな処理をしているかまでは分かりません。

許可を求める範囲と、実際に行う処理は別です。

広い範囲を指定したDも、読み取り処理は専用ローカルページに限定しています。Aの結果も、あらゆる方法でページを読めないことの証明ではありません。

実在の拡張の通信先や難読化されたコード、ストアの審査、開発者の信頼性、将来の更新、利用者が追加で許可した権限までは調べていません。インストール時の警告画面も再現していません。検証の扱いはコンテンツ制作・計算検証方針に記載しています。

自分のファイルで確認する

自分のファイルで確認する

関連する検証