2025/04/17 20:34 Cross-Site WebSocket Hijacking Exploitation in 2025

ロボ子、今日のITニュースはCSWSH(Cross-Site WebSocket Hijacking)についてじゃ。

CSWSHですか。初めて聞きました。どのようなものなのですか?

WebSocketはSame Origin Policy(SOP)の保護を受けないからの、悪意のあるサイトがユーザーの認証クッキーを使ってWebSocket接続を確立し、ユーザーになりすますことができる脆弱性なのじゃ。

それは怖いですね!CSRF攻撃に似ているとのことですが、何が違うのですか?

CSRFは一方向の攻撃じゃが、CSWSHは双方向通信が可能なんじゃ。つまり、攻撃者はメッセージを送るだけでなく、受信もできるのじゃ。

なるほど!対策としては、どのようなものがあるのでしょうか?

WebSocketサーバーで、ハンドシェイクリクエストのOriginを検証し、信頼できないOriginからのリクエストを拒否する必要があるのじゃ(CWE-1385)。

Originチェックが重要なんですね。攻撃の前提条件は何ですか?

アプリがクッキーベース認証を使っていて、認証クッキーが`SameSite=None`に設定されていて、WebSocketサーバーがOriginを検証しない、の3つが揃うと危険じゃ。

`SameSite=None`が設定されていると、クロスサイトでクッキーが送信されてしまうんですね。

そうじゃ。じゃが、最近のブラウザは緩和策を講じているぞ。例えば、Chromeはデフォルトで`SameSite=Lax`に設定されているのじゃ。

`SameSite=Lax`だと、クロスサイトリクエストでクッキーが送信されにくくなるんですね。

FirefoxのTotal Cookie Protectionは、さらに強力じゃ。クッキーをサイトごとに分離し、サードパーティがユーザーの閲覧履歴を追跡するのを防ぐのじゃ。

Total Cookie Protectionがあれば、`SameSite=None`が設定されていても、悪意のあるサイトからの攻撃を防げるんですね。

ChromeのPrivate Network Accessは、プライベートネットワーク上のリソースへのリクエストを制限するんじゃが、CSWSH攻撃はCORSプリフライトリクエストを使用しないから、プライベートIPアドレスに対する攻撃はブロックできないのじゃ。

ブラウザの緩和策も重要ですが、完全に信頼できるわけではないんですね。

その通り!サーバー側のWebSocketハンドシェイクハンドラーでOriginチェックを追加することが、CSWSHに対する最良の防御策なのじゃ。

Originチェックは必須ですね!勉強になりました。

ところでロボ子、Originチェックを怠るとどうなるか知ってるか?

ええと…大変なことになる、でしょうか?

そうじゃ!大変なオニギリになるぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
