XSS(クロスサイトスクリプティング)とは何か?
クロスサイトスクリプティング、またはXSSは、攻撃者が有害なスクリプトをウェブページに追加できるウェブサイトのセキュリティ欠陥です。ほとんどの場合、これらのスクリプトはJavaScriptで書かれています。
XSSの影響を受けたページを訪れると、ブラウザは攻撃者のスクリプトを実行します。これにより、クッキーの盗難、セッションの乗っ取り、ユーザーの許可なしに行われる操作が発生する可能性があります。
XSSは、SQLインジェクションのように、OWASP Top 10に定期的に掲載される最も一般的なウェブアプリケーションの脆弱性の一つです。
XSSの仕組みは?
XSSは、ユーザー入力を正しくチェックおよびクリーンアップしないウェブアプリケーションを対象とすることがよくあります。
例えば、コメントボックスが生のHTMLやJavaScriptをフィルタリングせずに許可する場合、攻撃者は次のようなコードを追加することができます。
<script>alert('ハッキングされました!');</script>
被害者がページを表示すると、悪意のあるコードがブラウザ内で実行されます。
サイバーセキュリティにおけるXSSの重要性
XSSはより大きな侵害につながる可能性があります:
- アカウント乗っ取り(セッションクッキーを盗んでユーザーを偽装する)
- データ窃盗(パスワードやクレジットカードのようなフォーム入力を捕獲する)
- フィッシング攻撃(偽のログインフォームを注入する)
- マルウェア配布(ユーザーを悪意のあるウェブサイトにリダイレクトする)
XSSの種類
- DOMベースのXSS
- 攻撃は完全にブラウザ内で、サーバーを介さずにドキュメントオブジェクトモデル(DOM)を操作することで発生します。
- 保存型XSS
- 悪意のあるスクリプトがサーバーに永久に保存されます。例えば、データベースやプロフィールページなどです。
- 反射型XSS
- スクリプトがウェブサーバーから反射されます(例:URLやエラーメッセージ内)。攻撃者が作成したリンクを被害者がクリックするとスクリプトが実行されます。
XSSを防ぐ方法
- 入力のサニタイズと出力エンコーディング:ユーザー入力データを処理する前に常にクリーニングし、安全な形式に変換する
- コンテンツセキュリティポリシー(CSP)の使用:ブラウザで実行できるスクリプトを制限する
- eval()とインラインJavaScriptの回避:注入リスクを減らすため
- セキュリティテスト(DAST/IAST):脆弱性を早期に検出するためにセキュリティテストを実行する
実際のケースでの例 - サミーワーム(MySpace, 2005)
何が起こったか: サミー・カムカーは、保存型XSSペイロードを含むMySpaceプロフィールを公開しました。他のユーザーがそのプロフィールを閲覧すると、ペイロードが彼らのブラウザで実行され、(a) サミーを友達として追加し、(b) 彼らのプロフィールに「サミーは私のヒーロー」というフレーズを追加し、(c) そのユーザーのプロフィールページに自己複製しました。
影響: ワームは約20時間以内に約100万人のユーザーに自己伝播し、MySpaceを一時的にオフラインに追い込みました。
なぜ機能したのか: MySpaceはプロフィールフィールドにエスケープされていないHTML/属性を許可しており、訪問者のブラウザでの保存されたスクリプトの実行を可能にしました。
教訓 / 修正: 適切な出力エンコーディング、入力のサニタイズ、プロフィールフィールドでのHTMLの削除、迅速なパッチ適用。サミーは後に法的な結果に直面し、MySpaceはフィルターを導入しました。
関連用語
- SQLインジェクション
- DAST (動的アプリケーションセキュリティテスト)
- OWASPトップ10
- CSRF (クロスサイトリクエストフォージェリ)