Hello there, ('ω')ノ
✅ 背景と目的
WebSocket通信を使うチャットアプリケーションなどでは、ユーザーの入力内容がそのまま他のユーザーに送信され、画面に表示されるケースが多くあります。
こうした場面で入力の検証やサニタイズが不十分だと、WebSocketメッセージを改ざんすることでXSS(クロスサイトスクリプティング)攻撃が成立します。
🧪 攻撃の前提とメッセージの構造
例えば以下のような通信構造になっているとします:
✅ 正常なメッセージ送信
ユーザーが「Hello Carlos」と送信すると:
{"message":"Hello Carlos"}
✅ サーバーから他のユーザーへ再送信
<td>Hello Carlos</td>
🚨 XSS攻撃の成立例
この構造でタグやイベント属性がフィルタされていなければ、以下のような悪意あるメッセージでXSSが成立します:
{"message":"<img src=1 onerror='alert(1)'>"}
✅ 結果:他のユーザーのブラウザでJavaScriptが実行される
<td><img src=1 onerror='alert(1)'></td>
→ このように、imgタグ+onerror属性は典型的なXSSテストベクトルです。
🛠 攻撃実施手順(Burp Suite使用)
ステップ | 操作 |
---|---|
① WebSocket通信を「WebSockets」タブで確認 | 該当の送信メッセージを探す |
② 右クリック →「Send to Repeater」 | メッセージを改ざん・送信するため |
③ メッセージ本文を書き換える | {"message":"<img src=1 onerror='alert(1)'>"} |
④ Sendでサーバーへ送信 | 攻撃メッセージを他ユーザーに転送させる |
⑤ 被害者の画面でスクリプト実行を確認 | alert(1) ポップアップが表示されれば成功 |
✅ 対策方法
対策 | 内容 |
---|---|
エスケープ処理 | < , > , ' , " などの文字をHTMLエンコード |
コンテンツセキュリティポリシー(CSP) | 'unsafe-inline' を禁止する |
メッセージのスキーマ検証 | JSON構造と内容の型や長さを事前に検証する |
✅ まとめ
- WebSocket経由でも、通常のHTTPと同様にXSS脆弱性は発生する
- JSON内のデータをHTMLにそのまま表示してしまう構造は特に危険
- 攻撃はBurpで簡単に再現・検証可能
Best regards, (^^ゞ