BrowExt - permissions & host_permissions
基本情報
permissions
permissions
権限は、拡張機能の manifest.json
ファイルで permissions
プロパティを使用して定義され、ブラウザがアクセスできるほとんどすべてのもの(Cookieまたは物理ストレージ)へのアクセスを許可します:
前述のマニフェストは、拡張機能が storage
権限を必要とすることを宣言しています。これは、ストレージAPIを使用してデータを永続的に保存できることを意味します。ユーザーに一定レベルの制御を提供するCookieや localStorage
APIとは異なり、拡張機能のストレージは通常、拡張機能をアンインストールすることでのみクリアできます。
拡張機能は、その manifest.json
ファイルで示されている権限を要求し、拡張機能をインストールした後、この画像に示されているように、ブラウザでいつでもその権限を確認できます:
Chromiumブラウザ拡張機能がリクエストできる権限の完全なリストはこちら および Firefox拡張機能の完全なリストはこちら.
host_permissions
host_permissions
オプションですが強力な設定 host_permissions
は、拡張機能が cookies
、webRequest
、および tabs
などのAPIを介してどのホストとやり取りできるかを示します。
以下の host_permissions
は基本的にすべてのWebサイトを許可します:
これらは、ブラウザ拡張機能が自由にアクセスできるホストです。これは、ブラウザ拡張機能が fetch("https://gmail.com/")
を呼び出すときに CORS によって制限されないためです。
permissions
と host_permissions
の乱用
permissions
と host_permissions
の乱用タブ
さらに、host_permissions
は「高度な」tabs API 機能を解除します。 これにより、拡張機能は tabs.query() を呼び出し、ユーザーのブラウザタブのリストを取得するだけでなく、読み込まれている Web ページ(アドレスとタイトルを含む)を知ることもできます。
さらに、tabs.onUpdated のようなリスナーもはるかに有用になります。 これらは、新しいページがタブに読み込まれるたびに通知されます。
コンテンツスクリプトの実行
コンテンツスクリプトは、基本的に拡張機能のマニフェストに静的に書かれている必要はありません。host_permissions
が十分にあれば、拡張機能は tabs.executeScript() または scripting.executeScript() を呼び出すことで動的に読み込むこともできます。
これらの API は、拡張機能に含まれるファイルだけでなく、任意のコードを実行できます。前者は JavaScript コードを文字列として渡すことができ、後者は JavaScript 関数を期待しますが、これはインジェクションの脆弱性が少ないです。それでも、これらの API は誤用されると混乱を招きます。
上記の機能に加えて、コンテンツスクリプトは、たとえば、Web ページに入力される資格情報を傍受することができます。これらを悪用する古典的な方法の1つは、すべての Web サイトに広告を注入することです。ニュースサイトの信頼性を悪用するために詐欺メッセージを追加することも可能です。最後に、銀行の Web サイトを操作して送金をリダイレクトすることもできます。
暗黙の権限
一部の拡張機能の権限は明示的に宣言する必要はありません。その1つは tabs API です。その基本機能は特別な権限なしでアクセスできます。任意の拡張機能は、タブを開いたり閉じたりするときに通知を受け取ることができますが、どの Web サイトに対応するかはわかりません。
無害に聞こえますか? tabs.create() API は少し異なります。これを使用して、新しいタブを作成できます。基本的には window.open() と同じですが、どの Web サイトでも呼び出すことができます。ただし、window.open()
はポップアップブロッカーの対象ですが、tabs.create()
は対象ではありません。
拡張機能は、必要に応じていつでも任意の数のタブを作成できます。
tabs.create()
の可能なパラメータを見ると、その機能が window.open()
が制御できる範囲をはるかに超えていることに気付くでしょう。Firefox はこの API で data:
URI の使用を許可していませんが、Chrome にはそのような保護がありません。このような URI のトップレベルでの使用は フィッシングに悪用されたため禁止されています。
tabs.update() は tabs.create()
に非常に似ていますが、既存のタブを変更します。したがって、悪意のある拡張機能は、例えば、広告ページを任意のタブに任意に読み込むことができ、対応するタブもアクティブ化できます。
ウェブカメラ、ジオロケーション、およびその他
おそらく、Web サイトは特別な権限をリクエストできることを知っているでしょう。たとえば、ウェブカメラ(ビデオ会議ツール)や地理的位置(地図)へのアクセスを求めることができます。これは悪用の可能性が高い機能であり、ユーザーは毎回これを継続して許可する必要があります。
しかし、ブラウザ拡張機能では異なります。ブラウザ拡張機能が ウェブカメラやマイクへのアクセスを要求する場合、1度だけ許可を求めるだけです
通常、拡張機能はインストール直後にこれを行います。このプロンプトが受け入れられると、ウェブカメラへのアクセスがいつでも可能になります。ユーザーは、拡張機能が本当にウェブカメラへのアクセスが必要である場合にのみこのプロンプトを受け入れます。しかし、その後、拡張機能が何も秘密裏に記録しないことを信頼する必要があります。
正確な地理的位置やクリップボードの内容へのアクセスについては、明示的な許可は不要です。拡張機能は、単にマニフェストの permissions エントリ に geolocation
または clipboard
を追加するだけです。 これらのアクセス権限は、拡張機能がインストールされると暗黙的に付与されます。したがって、これらの権限を持つ悪意のあるまたは侵害された拡張機能は、あなたの移動履歴を作成したり、コピーされたパスワードを監視したりすることができ、あなたが何も気づかないままです。
[history] キーワードをpermissions エントリ に追加すると、history API にアクセスできます。これにより、ユーザーのすべてのブラウジング履歴を待つことなく一度に取得できます。
bookmarks
権限には同様の悪用の可能性があり、これにより、bookmarks API を介してすべてのブックマークを読み取ることができます。
ストレージ権限
拡張機能のストレージは、基本的には任意の Web サイトが使用できる localStorage と非常に似ています。したがって、ここには機密情報を保存すべきではありません。
ただし、広告会社もこのストレージを悪用する可能性があります。
その他の権限
Chromium ブラウザ拡張機能がリクエストできる権限の完全なリストはこちらで確認できます 、Firefox 拡張機能の完全なリストはこちらで確認できます。
予防
Google の開発者ポリシーは、拡張機能が機能に必要以上の権限を要求することを明示的に禁止しており、過剰な権限要求を緩和しています。ブラウザ拡張機能がこの境界を越えた例は、ブラウザ自体と一緒に配布された場合であり、アドオンストアを介してではありません。
ブラウザは、拡張機能の権限の誤用をさらに抑制できます。たとえば、Chrome の tabCapture および desktopCapture API は、画面録画に使用され、悪用を最小限に抑えるよう設計されています。tabCapture API は、拡張機能アイコンをクリックするなどの直接のユーザー操作を介してのみアクティブ化でき、desktopCapture は、ウィンドウの録画に対してユーザーの確認が必要であり、秘密裏の録画活動を防止します。
ただし、セキュリティ対策を強化すると、拡張機能の柔軟性とユーザーフレンドリー性が低下することがよくあります。activeTab 権限 は、このトレードオフを示しています。これは、拡張機能がインターネット全体にホスト権限を要求する必要をなくし、ユーザーによる明示的なアクティベーションによって現在のタブのみにアクセスできるようにするために導入されました。このモデルは、ユーザーが起動アクションを必要とする拡張機能に対しては効果的ですが、自動的または予防的なアクションを必要とする拡張機能には適しておらず、便利さと即時応答性が損なわれる可能性があります。
参考文献
Last updated