Hello there, ('ω')ノ
🌐 WebSocketsとは?
WebSocketsは、HTTP経由で接続を開始し、クライアントとサーバの間に持続的な通信チャネルを確立します。これにより、非同期かつリアルタイムな双方向通信が可能になります。
⚠️ WebSocketsで発生し得る脆弱性の種類
サーバ側での処理ミスに起因する攻撃
- SQLインジェクション
- XML外部実体参照(XXE)
- 認可バイパス(IDOR)
クライアント側への反射による攻撃
- クロスサイトスクリプティング(XSS)
外部通知ベースの脆弱性(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, (^^ゞ