クロスサイトリクエストフォージェリ(CSRF)攻撃は、オープンページでユーザセッションを管理するために、Webブラウザの一般的に受け入れられているロジックを悪用します。 標準では、ユーザーは現在使用している Web アプリケーションで 1 つのアクティブなセッションしか持てないためです。 ブラウザで新しく開いたタブは、すでにログインしているユーザーのクッキーを自動的に使用します。 攻撃者は、被害者がアクティブなセッションを持つページで、どのアクションがトリガされるか (パスワードの変更など) をクリックした後、被害者に特別に準備されたリンクを送信することで、この事実を最も頻繁に使用します。
この種の攻撃に対する保護は、多くの場合、 セッションごとに 特別なユニークで予測不可能なパラメータを追加することで、機密要求(パスワードの変更、新しいユーザーの追加など)に変数として接着され、その正確性はサーバーによって検証されます。 このトークンの値を知らない攻撃者は、 反 CSRF トークンの非準拠のためにサーバーが拒否しない要求を生成できません。
テストしたアプリケーションの 1 つで、多くの CSRF 攻撃を実行する可能性を発見しました。 1 つの例として、ログインユーザーがユーザーに代わってパスワード変更要求を行う特別な細工がされたページを準備します。 このページのコードと、新しいパスワードの入力を担当するパラメーターを次に示します。 次の印刷出力で選択した行は、新しいパスワードが定義されている入力フォーム フィールドを定義するコードを示しています。
代替ページに入ったユーザーからのセッションを使用する自動送信要求は、次のようになります。
ホスト: XXXXX
ユーザーエージェント: Mozilla/5.0 (X11;Linux x86_64;rv:45.0) ヤモリ/20100101 Firefox/45.0
[..
コンテンツ処分-----------------------------70124987214088125821572825923: フォームデータ; 名前="newpassword"
csrf
[.]
応答として、アプリケーションは、次のスクリーンショットに示されているパスワードの変更を確認します。