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

126 lines
14 KiB
Markdown
Raw Normal View History

# BrowExt - 権限とホスト権限
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</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)を発見し、独占的な[**NFT**](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**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</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).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ページに入力される**資格情報を傍受**することができます。また、**広告を注入**して、すべてのウェブサイトに広告を表示する方法もあります。ニュースサイトの信頼性を損なう**詐欺メッセージ**を追加することも可能です。最後に、**銀行の**ウェブサイトを**操作**して送金をリダイレクトすることもできます。
{% 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)です。基本的な機能は特権なしでアクセスできます。任意の拡張機能は、タブを開いたり閉じたりするときに通知を受け取ることができますが、どのウェブサイトに対応するタブかはわかりません。
無害に聞こえますか?[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)と同じですが、どのウェブサイトが呼び出されるかはわかりません。
{% 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>
おそらく、ウェブサイトは特別な権限をリクエストできることを知っています。例えば、ウェブカメラ(ビデオ会議ツール)や地理的位置(地図)へのアクセスを要求することができます。これは濫用の可能性がある機能であり、ユーザーは毎回これを許可する必要があります。
{% 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**]キーワードを[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)への**アクセス**が許可されます。これにより、ユーザーの全体の閲覧履歴を待つことなく一度に取得できます。
**`bookmarks`** **permission**には同様の悪用の可能性があり、これにより、[**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>
拡張機能のストレージは、任意のウェブサイトが使用できる[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)