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>ゼロからヒーローまで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) をフォローする。
* **ハッキングテクニックを共有するために、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 (18).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**] キーワードを[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>
拡張機能のストレージは、基本的には任意の 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** および **HackTricks Cloud** のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>