hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md

139 lines
16 KiB
Markdown
Raw Normal View History

# BrowExt - 権限とホスト権限
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>でAWSハッキングをゼロからヒーローまで学ぶ</summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する
- **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のgithubリポジトリに提出してください。**
</details>
## 基本情報
### **`permissions`**
権限は、拡張機能の**`manifest.json`**ファイルで**`permissions`**プロパティを使用して定義され、ブラウザがアクセスできるほとんどすべてのものCookieまたは物理ストレージへのアクセスを許可します
前述のマニフェストは、拡張機能が`storage`権限を必要とすることを宣言しています。これは、[ストレージAPI](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)を使用してデータを永続的に保存できることを意味します。ユーザーに一定レベルの制御を提供するCookieや`localStorage` APIとは異なり、**拡張機能のストレージは通常、拡張機能をアンインストールすることでのみクリアできます**。
拡張機能は、**`manifest.json`**ファイルで示された権限を要求し、拡張機能をインストールした後、ブラウザでその権限を常に確認できます。次の画像に示すように:
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
[**Chromiumブラウザ拡張機能がリクエストできる権限の完全なリストはこちら**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions)、[**Firefox拡張機能の完全なリストはこちら**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**。**
### `host_permissions`
オプションですが強力な**`host_permissions`**設定は、[`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies)、[`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest)、および[`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)などのAPIを介して拡張機能がどのホストと対話できるかを示します。
次の`host_permissions`は基本的にすべてのWebサイトを許可します
```json
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
```
これらは、ブラウザ拡張機能が自由にアクセスできるホストです。ブラウザ拡張機能が **`fetch("https://gmail.com/")`** を呼び出すとき、**CORS によって制限されません**。
## `permissions` と `host_permissions` の乱用
### タブ
さらに、**`host_permissions`** は「高度な」[**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **機能を解除します。** これにより、拡張機能は [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) を呼び出し、**ユーザーのブラウザタブのリストを取得するだけでなく、読み込まれている** **Web ページ(アドレスとタイトルを含む)を知ることができます**
{% hint style="danger" %}
さらに、[**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) のようなリスナーも**はるかに有用になります**。これらは、新しいページがタブに読み込まれるたびに通知されます。
{% endhint %}
### コンテンツスクリプトの実行 <a href="#running-content-scripts" id="running-content-scripts"></a>
コンテンツスクリプトは、静的に拡張機能マニフェストに書かれている必要はありません。**`host_permissions`** が十分であれば、**拡張機能は [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **または** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript) を呼び出すことで、動的に読み込むこともできます。
両方の API は、拡張機能に含まれるファイルだけでなく、**任意のコード**を実行できます。前者は JavaScript コードを文字列として渡すことができ、後者は JavaScript 関数を期待しますが、これはインジェクションの脆弱性が少ないです。それでも、これらの API は誤用されると混乱を招きます。
{% hint style="danger" %}
上記の機能に加えて、コンテンツスクリプトは、たとえば、Web ページに入力される**資格情報を傍受**することができます。これらを悪用する古典的な方法の1つは、すべての Web サイトに**広告を注入**することです。**詐欺メッセージ**をニュースサイトの信頼性を悪用するために追加することも可能です。最後に、**銀行の**Web サイトを操作して送金をリダイレクトすることもできます。
{% endhint %}
### 暗黙の権限 <a href="#implicit-privileges" id="implicit-privileges"></a>
一部の拡張機能の権限は**明示的に宣言する必要はありません**。その1つは [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) です。その基本機能は権限なしでアクセスできます。任意の拡張機能は、タブを開いたり閉じたりするときに通知を受け取ることができますが、どの Web サイトに対応するタブかはわかりません。
無害に聞こえますか? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) は少し異なります。これを使用して、新しいタブを作成できます。基本的には、[window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) と同じですが、どの Web サイトでも呼び出すことができます。ただし、`window.open()` は**ポップアップブロッカーの対象**ですが、`tabs.create()` はそうではありません。
{% hint style="danger" %}
拡張機能は、必要に応じていつでも任意の数のタブを作成できます。
{% endhint %}
`tabs.create()` の可能なパラメータを見ると、その機能が `window.open()` が制御できる範囲をはるかに超えていることに気付くでしょう。Firefox はこの API で `data:` URI の使用を許可していませんが、Chrome にはそのような保護がありません。**このような URI のトップレベルでの使用は** [**フィッシングに悪用されたため禁止されています**](https://bugzilla.mozilla.org/show\_bug.cgi?id=1331351)**。**
[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) は `tabs.create()` に非常に似ていますが、**既存のタブを変更**します。したがって、悪意のある拡張機能は、例えば、広告ページを任意のタブに任意に読み込むことができ、対応するタブもアクティブ化できます。
### ウェブカメラ、ジオロケーションなど <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
おそらく、Web サイトは特別な権限をリクエストできることを知っているでしょう。たとえば、ウェブカメラ(ビデオ会議ツール)や地理的位置(地図)へのアクセスなどです。これは悪用の可能性が高い機能であり、ユーザーは毎回これを継続して許可する必要があります。
{% hint style="danger" %}
しかし、ブラウザ拡張機能では異なります。**ブラウザ拡張機能が** [**ウェブカメラやマイクへのアクセスを要求する場合**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**、1度だけ許可を求めるだけで済みます**
{% endhint %}
通常、拡張機能はインストール直後にこれを行います。このプロンプトが受け入れられると、**ユーザーが拡張機能と対話していない場合でも、いつでもウェブカメラにアクセスできます**。はい、ユーザーは拡張機能が本当にウェブカメラへのアクセスが必要かどうかを確認した後にこのプロンプトを受け入れます。しかし、その後は、拡張機能が何も秘密裏に記録しないことを信頼する必要があります。
[正確な地理的位置](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation)や[クリップボードの内容](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API)へのアクセスについては、明示的な許可は不要です。**拡張機能は、単にマニフェストの** [**permissions エントリ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **に `geolocation` または `clipboard` を追加するだけです。** これらのアクセス権限は、拡張機能がインストールされると暗黙的に付与されます。したがって、これらの権限を持つ悪意のあるまたは侵害された拡張機能は、あなたの移動履歴を作成したり、コピーされたパスワードを監視したりすることができますが、あなたが何も気づかないでしょう。
[**history**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history) **キーワードを** [**permissions エントリ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **に追加すると、** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history) **へのアクセスが可能になります。** これにより、ユーザーの全体の閲覧履歴を一度に取得でき、ユーザーがこれらの Web サイトを再度訪れるのを待つ必要はありません。
**`bookmarks`** **権限**には同様の悪用の可能性があり、これにより、**[**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks)**を介してすべてのブックマークを読み取ることができます。**
### ストレージ権限 <a href="#the-storage-permission" id="the-storage-permission"></a>
拡張機能のストレージは、任意の Web サイトが使用できる [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) に非常に似たキーと値のコレクションです。したがって、ここには機密情報を保存すべきではありません。
ただし、広告会社もこのストレージを悪用する可能性があります。
### その他の権限
[**Chromium ブラウザ拡張機能がリクエストできる権限の完全なリストはこちらで確認できます**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions)、[**Firefox 拡張機能の完全なリストはこちらで確認できます**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**。**
## 予防 <a href="#why-not-restrict-extension-privileges" id="why-not-restrict-extension-privileges"></a>
Google の開発者ポリシーは、拡張機能が機能に必要以上の権限を要求することを明示的に禁止しており、過剰な権限要求を緩和しています。ブラウザ拡張機能がこの境界を越えた例は、ブラウザ自体と一緒に配布された場合であり、アドオンストアを介してではありません。
ブラウザは、拡張機能の権限の誤用をさらに抑制できます。たとえば、Chrome の [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) および [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) API は、画面録画に使用され、悪用を最小限に抑えるよう設計されています。tabCapture API は、拡張機能アイコンをクリックするなどの直接のユーザー操作を通じてのみアクティブ化でき、desktopCapture は、ウィンドウの録画に対してユーザーの確認が必要で、秘密裏に録画される活動を防ぎます。
ただし、セキュリティ対策を強化すると、拡張機能の柔軟性とユーザーフレンドリー性が低下することがよくあります。[activeTab 権限](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab\_permission) は、このトレードオフを示しています。これは、拡張機能がインターネット全体にホスト権限を要求する必要をなくし、ユーザーによる明示的なアクティベーションで現在のタブのみにアクセスできるようにするために導入されました。このモデルは、ユーザーが起動アクションを必要とする拡張機能に対して効果的ですが、自動的または予防的なアクションを必要とする拡張機能には適しておらず、便利さと即時の応答性が損なわれる可能性があります。
## **参考文献**
* [https://palant.info/2022/08/17/impact-of-extension-privileges/](https://palant.info/2022/08/17/impact-of-extension-privileges/)
* [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローする。**
* **ハッキングトリックを共有するために、**[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) githubリポジトリにPRを提出する。
</details>