# XS-Search/XS-Leaks
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も先進的なコミュニティツールによって強化された**ワークフローを簡単に構築**し、自動化することができます。\ 今すぐアクセスを取得: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業で働いていますか?** HackTricksで**会社を宣伝**したいですか?または、**最新バージョンのPEASSをダウンロード**したいですか?[**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)のコレクションです。 * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。 * **ハッキングのトリックを共有**するには、[**hacktricks repo**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。
## **基本情報** XS-Searchは、**サイドチャネル攻撃**を悪用して、**クロスオリジン情報を外部流出**させるための技術です。 この種の攻撃には、次の要素があります: * **脆弱なWeb**:情報を外部流出させたいWeb * **攻撃者のWeb**:攻撃者が作成し、被害者がアクセスするWeb * **インクルージョンメソッド**:脆弱なWebを攻撃者のWebから読み込むために使用されるメソッド(window.open、iframe、fetch、hrefを使用したHTMLタグなど) * **リーク技術**:脆弱なWebにアクセスした後、インクルージョンメソッドから得られた情報との間でWebの潜在的な状態を区別するために使用される技術 * **状態**:被害者を区別するために脆弱なWebが持つ可能性のある2つの状態 * **検出可能な違い**:攻撃者が脆弱なWebの状態を判断するために試みる必要がある情報 ### 検出可能な違い 脆弱なページの2つの状態を区別するために、次のことに注意することができます: * **ステータスコード**。攻撃者は、クロスオリジンで**異なるHTTPレスポンスステータスコード**(サーバーエラー、クライアントエラー、認証エラーなど)を区別することができます。 * **APIの使用**。この検出可能な違いにより、攻撃者はページ間での**Web APIの使用**を検出することができ、クロスオリジンページが特定のJavaScript Web APIを使用しているかどうかを推測することができます。 * **リダイレクト**。Webアプリケーションがユーザーを**別のページに移動**させたかどうかを検出することができます。これはHTTPリダイレクトに限らず、JavaScriptやHTMLによってトリガーされるリダイレクトも含まれます。 * **ページの内容**。これらの検出可能な**違いは、HTTPレスポンスボディ自体またはページに含まれるサブリソースに現れます**。たとえば、これは含まれるフレームの数(cf. XS-Leak on Gitlab)や画像のサイズの違いなどです。 * **HTTPヘッダー**。攻撃者は、特定のHTTPレスポンスヘッダーの存在を検出し、その値を収集することができます。これには、X-Frame-Options、Content-Disposition、Cross-Origin-Resource-Policyなどのヘッダーが含まれます。 * **タイミング**:攻撃者は、2つの状態間に一貫した時間差が存在することを検出することができます。 ### インクルージョンメソッド * **HTML要素**。HTMLには、**クロスオリジンリソースのインクルージョン**を可能にするさまざまな要素があります。スタイルシート、画像、スクリプトなどの要素は、被害者のブラウザに指定された非HTMLリソースのリクエストを要求します。この目的のために使用できるHTML要素のリストはオンラインで利用可能です([https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks))。 * **フレーム**。**iframe**、**object**、**embed**などの要素は、攻撃者のページに直接他のHTMLリソースを埋め込むことができます。ページが**フレーミング保護を使用していない**場合、JavaScriptコードはcontentWindowプロパティを介してフレーム化されたリソースのwindowオブジェクトにアクセスすることができます。 * **ポップアップ**。**`window.open`**メソッドは、新しいブラウザタブやウィンドウにリソースを読み込みます。このメソッドは、JavaScriptコードがSOPに準拠したメソッドとプロパティにアクセスするために使用できる**ウィンドウハンドル**を返します。これらのポップアップは、シングルサインオンでよく使用されます。最新のブラウザバージョンでは、特定のユーザー操作によってトリガーされた場合にのみポップアップが許可されます。XS-Leak攻撃では、このメソッドが特に役立ちます。なぜなら、これにより、対象リソースのフレーミングとクッキーの制限を**バイパス**することができるからです。新しいブラウザバージョンでは、ウィンドウハンドルを分離する手段が最近追加されました。 * **JavaScriptリクエスト**。JavaScriptでは、対象リソースに直接リクエストを送信することができます。このためには、2つの異なる方法があります:**XMLHttpRequests**とその後継である**Fetch API**。以前のインクルージョンメソッドとは異なり、攻撃者は発行されるリクエストに対して細かい制御を持つことができます。たとえば、HTTPリダイレクトを自動的に追跡するかどうかなどです。 ### リーク技術 * **イベントハンドラ**。イベントハンドラは、XS-Leaksの古典的なリーク技術と見なすことができます。さまざまな情報の源としてよく知られています。たとえば、**onload**のトリガーは、onerrorイベントとは対照的に、**リソースの正常な読み込みを示します**。 * **エラーメッセージ**。イベントハンドラの他に、エラーメッセージは**JavaScriptの例外**や**特別なエラーページ**として発生することがあります。エラーメッセージは、リーク技術によって直接スローされるなど、さまざまなステップで発生することがあります。リーク技術は、エラーメッセージに直接**含まれる追加の情報**を使用するか、**エラーメッセージの表示と不在の違い**を区別することができます。 * **グローバル制限**。すべてのコンピュータには物理的な制限があり、ブラウザも同様です。たとえば、利用可能なメモリの量はブラウザの実行中のタブを制限します。同様に、ブラウザ全体に対して強制される他のブラウザ制限にも同じことが言えます。攻撃者が**制限が達成された時点を特定できれば、これをリーク技術として使用することができます**。 * **グローバルステート**。ブラウザには、すべてのページが相互作用できる**グローバルステート**があります。この相互作用が攻撃者のウェブサイトから検出可能であれば、これをリーク技術として使用することができます。たとえば、**History**インターフェースは、タブやフレームで訪れたページを操作することができます。これにより、**エントリの数**によって、攻撃者は異なるオリジンのページについての結論を導くことができます。 * **パフォーマンスAPI**。パフォーマンスAPIは、現在のページの**パフォーマンス情報にアクセスするために使用されます**。エントリには、ドキュメントとページによってロードされたすべてのリソースの詳細なネットワークタイミングデータが含まれています。これにより、攻撃者は**要求されたリソースについての結論を導くことができます**。たとえば、一部のリクエストに対してブラウザがパフォーマンスエントリを作成しないケースを特定しました。 * **読み取り可能な属性**。HTMLには、クロスオリジンで**読み取り可能な属性**がいくつかあります。この読み取りアクセスはリーク技術として使用することができます。たとえば、JavaScriptコードは、window.frame.lengthプロパティを使用して、ウェブページに含まれるフレームの数をクロスオリジンで読み取ることができます。 #### **タイミングベースの技術** 以下のいくつかの技術では、ウェブページの可能な状態の違いを検出するためにタイミングを使用します。ウェブブラウザで時間を計測するためのさまざまな方法があります。 **クロック**:[performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) APIを使用すると、高解像度のタイミング測定を行うことができます。\ 攻撃者は、暗黙のクロックを作成するために悪用できるAPIが多数あります:[Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API)、[Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel)、[requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame)、[setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout)、CSSアニメーションなど。\ 詳細についてはこちら:[https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## XSinator XSinatorは、その論文で説明されているいくつかの既知のXS-Leakに対してブラウザを自動的にチェックするツールです:[https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf)\ ツールにアクセスするには、[https://xsinator.com/](https://xsinator.com/)にアクセスしてください。 {% hint style="warning" %} **除外されたXS-Leaks**:XSinatorでは、他のリークに干渉する可能性があるため、**サービスワーカーに依存するXS-Leaksは除外**しました。さらに、特定のWebアプリケーションのミス構成やバグに依存するXS-Leaksも**除外**しました。たとえば、Cross-Origin Resource Sharing(CORS)のミス構成、postMessageの漏洩、またはクロスサイトスクリプティングなどです。さらに、時間ベースのXS-Leaksも除外しました。なぜなら、それらは遅く、ノイズが多く、正確性に欠けることが多いからです。 {% endhint %}
\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化できます。\ 今すぐアクセスしてください: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## イベントハンドラの技術 ### Onload/Onerror * **含有方法**:フレーム、HTML要素 * **検出可能な違い**:ステータスコード * **詳細情報**:[https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) * **概要**:リソースをロードしようとする場合、onerror/onloadイベントがリソースの読み込みが成功/失敗したことを示すため、ステータスコードを特定することが可能です。 * **コード例**:[https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)](https://xsinator.com/testing.html#Event%20Handler%20Leak%20\(Script\)) {% content-ref url="xs-search/cookie-bomb-+-onerror-xs-leak.md" %} [cookie-bomb-+-onerror-xs-leak.md](xs-search/cookie-bomb-+-onerror-xs-leak.md) {% endcontent-ref %} このコード例では、**JSからスクリプトオブジェクトをロード**しようとしますが、オブジェクト、スタイルシート、画像、オーディオなどの**他のタグ**も使用できます。さらに、タグを直接**インジェクト**し、タグ内に`onload`と`onerror`イベントを宣言することも可能です(JSからインジェクトするのではなく)。この攻撃のスクリプトレスバージョンもあります。 ```html ``` この場合、`example.com/404`が見つからない場合には`attacker.com/?error`が読み込まれます。 ### Onload Timing * **Inclusion Methods**: HTML Elements * **Detectable Difference**: Timing (generally due to Page Content, Status Code) * **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) * **Summary:** [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API**を使用して、リクエストの実行にかかる時間を測定することができます。ただし、[**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming)など他のクロックも使用できます。 * **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 他の例は以下を参照してください: {% content-ref url="xs-search/performance.now-example.md" %} [performance.now-example.md](xs-search/performance.now-example.md) {% endcontent-ref %} #### Onload Timing + Forced Heavy Task このテクニックは前のものと同様ですが、**攻撃者**は**回答が肯定的または否定的**である場合に、**関連する時間を強制的に**かける**いくつかのアクション**を実行し、その時間を測定します。 {% content-ref url="xs-search/performance.now-+-force-heavy-task.md" %} [performance.now-+-force-heavy-task.md](xs-search/performance.now-+-force-heavy-task.md) {% endcontent-ref %} ### unload/beforeunload Timing * **Inclusion Methods**: Frames * **Detectable Difference**: Timing (generally due to Page Content, Status Code) * **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) * **Summary:** [SharedArrayBuffer clock](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers)を使用して、リクエストの実行にかかる時間を測定することができます。他のクロックも使用できます。 * **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload\_event)と[`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload\_event)イベントを使用して、リソースの取得にかかる時間を測定することができます。これは、**`beforeunload`**がブラウザが**新しいナビゲーション**リクエストを要求するときにトリガーされ、**`unload`**がその**ナビゲーションが実際に発生する**ときにトリガーされるためです。この動作により、これらの2つのイベント間の時間差を計算し、ブラウザがリソースの取得を完了するまでにかかった時間を測定することができます。 ### Sandboxed Frame Timing + onload * **Inclusion Methods**: Frames * **Detectable Difference**: Timing (generally due to Page Content, Status Code) * **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) * **Summary:** [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) APIを使用して、リクエストの実行にかかる時間を測定することができます。他のクロックも使用できます。 * **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) もしページに[Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/)が実装されていない場合、攻撃者はページとすべてのサブリソースがネットワーク上で読み込まれるまでにかかる時間を計測することができます。デフォルトでは、iframeの`onload`ハンドラはすべてのリソースが読み込まれ、すべてのJavaScriptの実行が完了した後に呼び出されます。しかし、攻撃者は`