Shikata Ga Nai

Private? There is no such things.

WebSocketsのセキュリティ脆弱性と悪用手法

Hello there, ('ω')ノ

🌐 WebSocketsとは?

WebSocketsは、HTTP経由で接続を開始し、クライアントとサーバの間に持続的な通信チャネルを確立します。これにより、非同期かつリアルタイムな双方向通信が可能になります。


⚠️ WebSocketsで発生し得る脆弱性の種類

  1. サーバ側での処理ミスに起因する攻撃

    • SQLインジェクション
    • XML外部実体参照(XXE)
    • 認可バイパス(IDOR)
  2. クライアント側への反射による攻撃

    • クロスサイトスクリプティング(XSS)
  3. 外部通知ベースの脆弱性(OAST)

    • ブラインドな攻撃で、OASTツールによる検知が必要

🧪 悪用例:XSSの再現

例として、チャットアプリが次のようなWebSocketメッセージを送信する場合を考えます:

{"message":"Hello Carlos"}

このメッセージは受信者側で以下のようにレンダリングされます:

<td>Hello Carlos</td>

この構成で入力検証やサニタイズ処理がなければ、次のようなXSS攻撃が可能です:

{"message":"<img src=1 onerror='alert(1)'>"}

受信者のブラウザでは以下のように反映され、onerror イベントでJavaScriptが実行されます:

<td><img src=1 onerror='alert(1)'></td>

🔍 診断のコツ

  • Burp Suiteを使用する: WebSocketsタブで通信を確認 → Repeaterに送信して改変 → 攻撃ペイロードを挿入

  • どの要素がDOMにレンダリングされるかを調査: innerHTMLなどが使用されている箇所を確認

  • メッセージ内容の構造(JSONなど)に注意: 不正な構文にしないよう、改変後もJSONとして有効な形式を保つこと


✅ まとめ

WebSocketsのメッセージは、入力検証を怠ると深刻な脆弱性の原因になります。HTTPと同様、入力ベースの全ての攻撃がWebSocketにも適用可能です。WebSocket通信だからといって特別扱いせず、従来の診断手法をリアルタイム通信に応用する意識が重要です。

Best regards, (^^ゞ