【情報処理安全確保支援士試験 令和4年度 春期 午後2 問1 No.2】
情報処理安全確保支援士試験 令和4年度 春期 午後2 問1
【出典:情報処理安全確保支援士試験 令和4年度 春期 午後2 問1(一部、加工あり)】
[サイトXのCSRF脆弱性]
サイトXは、セッションIDをJSESSIONIDというcookieに格納している。D社は、サイトXのキャンペーン応募ページでCSRF脆弱性を検出した。
CSRF脆弱性を確認した手順は、次のとおりであった。
⑴診断用利用者(以下、利用者Aという)の利用者IDでサイトXにログインし、キャンペーン応募ページで送信されるリクエストの内容をツールを使って確認した。リクエストの内容を図2に示す。
リクエストの内容を確認後、csftokenをCSRF対策用のパラメタと考え、リクエスト中のcsftokenの値を削除して送信した場合と1文字変更して送信した場合を試したところ、どちらもエラーとなった。
⑵利用者Aとは別の診断用利用者(以下、利用者Bという)の利用者IDでサイトXにログインし、キャンペーン応募ページで送信されるリクエスト中のcsftokenの値に、図2のcsftokenの値を設定して送信したところ、利用者Bとして処理された。
この結果から、csftokenと(a)又は(b)とをひも付けるという対策ができていないことが分かった。
a:利用者ID、b:セッションオブジェクト
「この結果から、csftokenと(a)又は(b)とをひも付けるという対策ができていないことが分かった。」
CSRF(Cross-Site Request Forgeries/クロスサイト・リクエスト・フォージェリ)とは、ログイン中の正規ユーザの意図したリクエストかどうかを識別する仕組みが不十分なWebサイトが標的にされ、外部サイトを経由した悪意のあるリクエストを受け入れてしまうことにより、利用者が予期しない処理を実行されられてしまうものです。
今回のCSRF脆弱性を確認した手順としては、以下のポイントがあります。
- 「注記3 csrftokenの値は、サーバが発行する推測困難な値であり、ほかの利用者の利用時には別の値が発行される。」
「リクエスト中のcsftokenの値を削除して送信した場合と1文字変更して送信した場合を試したところ、どちらもエラーとなった。」
→利用者毎に異なるcsrftokenの値は攻撃者により発行することは困難であることが分かります。 - 「利用者Aとは別の診断用利用者(以下、利用者Bという)の利用者IDでサイトXにログインし、キャンペーン応募ページで送信されるリクエスト中のcsftokenの値に、図2のcsftokenの値を設定して送信したところ、利用者Bとして処理された。」
→利用者Aに対して発行されたcsrftokenの値を使って、利用者Bのログイン中のリクエストが処理されてしまっており、csrftokenの値と利用者のひも付けができていないことが分かります。
したがって、csrftokenと利用者を示す「利用者ID」又は「セッションID」とをひも付けができていないとすればいいでしょう。(「セッションオブジェクト」は「利用者ID」と「セッションID」の組み合わせと考えられますが、問題文には出てこない言葉であるため、個人的には適切ではないと思います)