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

113 lines
12 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)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**する
- **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ページに入力される**資格情報を傍受**したり、各Webサイトに**広告を注入**したりするなど、様々な方法で悪用できます。**詐欺メッセージ**をニュースサイトの信頼性を悪用するために追加することも可能です。最後に、銀行のWebサイトを**操作して送金をリダイレクト**することもできます。
{% endhint %}
### 暗黙の権限 <a href="#implicit-privileges" id="implicit-privileges"></a>
一部の拡張機能の権限は、**明示的に宣言する必要はありません**。その例として、[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)と同じですが、どのウェブサイトからでも呼び出すことができます。ただし、`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)**、一度だけ許可を求めるだけで済みます**
{% 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/manifest.json/permissions) **キーワードを** [**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`** **権限**には同様の悪用の可能性があり、これにより、[**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)**。**