【情報処理安全確保支援士試験 令和5年度 秋期 午後 問1 No.3】

情報処理安全確保支援士試験 令和5年度 秋期 午後 問1

【出典:情報処理安全確保支援士試験 令和5年度 秋期 午後 問1(一部、加工あり)】

 図3のHTMLを確認したNさんは、会員Aによって15件のレビューが投稿されていること、及びページVには長いスクリプトが埋め込まれていることに気付いた。Nさんは、ページVにアクセスしたときに生じる影響を調査するために、アクセスしたときにWebブラウザで実行されるスクリプトを抽出した。図4は、Nさんが抽出したスクリプトである。

 Nさんは、会員Aの投稿はクロスサイトスクリプティング(XSS)脆弱性を悪用した攻撃を成立させるためのものであるという疑いをもった。NさんがWebアプリQを調べたところ、WebアプリQには、会員が入力したスクリプトが実行されてしまう脆弱性があることを確認した。加えて、WebアプリQがcookieにHttpOnly属性を付与していないこと及びアップロードされた画像ファイルの形式をチェックしていないことも確認した。
 Q社は、必要な対策を施し、会員への必要な対応も行った。

図4の6〜20行目の処理の内容を、60字以内で答えよ。:XHRのレスポンスから取得したトークンとともに、アイコン画像としてセッションIDをアップロードする。

 図4の処理内容について、大まかに確認していきます。

  • 7: page = xhr.response;
    受信したレスポンスを変数pageに格納
  • 8: token = page.getElemetByid(“token”).value;
    pageからtokenの値を取り出し、変数tokenに格納
  • 13: cookie = document.cookie;
    cookie情報を取り出し、変数cookieに格納
  • 16: file = new File([cookie],fname,{type: ftype});
    cookieの値を、ファイル名「a.png」(←fname)、ファイルタイプ「image/png」(←ftype)で新規作成
  • 17: form.append(“uploadfile”, file);
    formに、キー「uploadfile」、16行目のfileオブジェクトを格納
  • 18: form.append(“token”, token);
    formに、キー「token」、8行目のtokenを格納
  • 19: xhr2.send(form);
    HTTPリクエストを送信

 つまり、XHRのレスポンスから、アイコン画像を送信する際に必要なトークンを取得し、利用者のcookieの値を読み取り、トークンとともに、画像ファイルとしてアップロードしています。
 ここで、cookieについては図1に「ログインした会員には、セッションIDをcookieとして払い出す。」とあるように、cookie=セッションIDの値をアップロードすることになります。

攻撃者は、図4のスクリプトによってアップロードされた情報をどのようにして取得できるのか。取得する方法を、50字以内で答えよ。:会員のアイコン画像をダウンロードして、そこからセッションIDの文字列を取り出す。

 図2の注記「◯は、会員がアイコン画像をアップロードしていない場合に表示される画像である。」とあるように、アイコン画像には画像データではなく、スクリプトによってcookie情報のセッションIDの値がアップロードされています。

 したがって、このアイコン画像をダウンロードすれば、セッションIDの値を取り出すことが可能となります。

攻撃者が前の設問で取得した情報を使うことによってできることを、40字以内で答えよ。:ページVにアクセスした会員になりすまして、WebアプリQの機能を使う。

 セッションIDを取得することで、WebアプリQにログインした会員になりしますことが可能となります。
 図1の機能では、ログイン済み会員が利用できる機能全てが対象になることが分かります。