令和7年度 秋期 情報処理安全確保支援士試験 午後 問題 問1 SaaSの脆弱性悪用インシデント分析

テクノロジセキュリティ技術システム開発技術

この問題は2025(R7)秋 情報処理安全確保支援士 午後に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

学習ガイド

コンサルティング業務で使うSaaSで発生した、従業員によるWebアプリケーションへの攻撃を分析する問題です。表計算ファイルに仕込まれたスクリプトを読み、どの機能が悪用され、どんな手順で攻撃が実行されたかを図4の空欄として復元します。セキュアプログラミングの知識に加えてコードを読む体力が要求されるため、この記事ではスクリプトの処理を段階的に言語化し、対策の設問まで因果をつないで解説します。

この記事で押さえる論点

  • HTMLとECMAScriptを読んで攻撃の実行内容を特定する
  • HTTPレスポンスヘッダーのセキュリティ設定の効果を判定する
  • 悪用された機能への対策(入力検証・機能制限)を立案する

問題本文

問1 コンサルティング業務で利用するSaaSに関する次の記述を読んで,設問に答えよ。

H社では,コンサルティング業務で利用するSaaS(以下,Sサービスという)を提供している。コンサルティング業務を行う企業50社程度がSサービスを利用しており,総利用者数は1,000名程度である。

〔Sサービスの概要〕

Sサービスでは,利用企業ごとに複数のプロジェクトを登録できる。Sサービスの利用者には2種類のロールがある。自社の全てのプロジェクトの情報にアクセスできる管理者と,自身に割り当てられているプロジェクトの情報だけにアクセスできる一般利用者である。

Sサービスには,プロジェクトを管理する機能(以下,プロジェクト管理機能という)のほか,利用者がプロジェクト内で特定の話題ごとに“スレッド”と呼ばれるページを作成する機能(以下,スレッド作成機能という),スレッドに文章を投稿したりファイルをアップロードしたりする機能(以下,スレッド投稿機能という)などが設けられている。

Sサービスの主な機能を表1に示す。

表1 Sサービスの主な機能(抜粋)
図の説明テキスト

表1 Sサービスの主な機能(抜粋)

機能名 機能概要 備考
ログイン (省略) (省略)
利用者管理 管理者が,利用者の登録,変更及び削除を行う。 登録された利用者には,利用企業内で一意となる利用者IDが発行される。利用者IDの形式は次のとおりである。
“U”と数字8桁をつなげた文字列
ロール管理 管理者が,利用者のロールを設定する。 処理の流れは次のとおりである。
1. ログイン後の画面からロール管理機能を選択すると,パス “/management/role” にリクエストがGETメソッドで送信される。csrf_token という一時的でランダムな文字列のトークンが発行され,ロール設定画面が表示される。
2. ロール設定画面で任意の利用者のロールを変更し,確定ボタンをクリックすると,パス “/management/roleset” に対して,パラメータ csrf_token, is_admin 及び user_id を含むリクエストがPOSTメソッドで送信される。パラメータ is_admin は指定した利用者のロールに応じて次のいずれかが設定される。
- 管理者:is_admin=1
- 一般利用者:is_admin=0
プロジェクト管理 管理者が,プロジェクトの登録及び変更を行う。また,プロジェクトに一般利用者を割り当てる。 プロジェクトには,利用企業内で一意となるプロジェクトIDが発行される。プロジェクトIDの形式は次のとおりである。
“P”と数字8桁をつなげた文字列
タスク管理 利用者が,プロジェクトのタスク管理画面からタスクを登録し,タスクの担当者を割り当てる。また,タスクの更新を行う。 タスクには,次の項目を設定する。
・タスク名
・タスクの詳細説明
・タスクの担当者
・タスクの締切日
・タスクの進捗状況
・タスクの完了フラグ
スレッド作成 利用者が,スレッドを作成する。 スレッドの作成時は,アクセスできる一般利用者を指定する。管理者は利用企業内の全てのスレッドにアクセスできる。
スレッド投稿 利用者が,アクセスできるスレッドに文章の投稿とファイルのアップロードを行う。アップロードされたファイルは,ファイル識別子が一意になるように変更されてからサーバに保存される。 アップロードできるファイルの拡張子は,docx, xlsx, pptx, pdf, jpg, gif 及び png の7種類である。アップロードされたファイルは,スレッドにアクセスできる利用者だけがアクセスできる。ファイルの参照時及びダウンロード時のパスは次のとおりである。
/files/[一意のファイル識別子].[拡張子]
プロジェクト進捗管理 利用者が,プロジェクトの進捗を管理する。スケジュールの作成及び管理並びにタスクの進捗確認を行う。 未完了のタスクのうち締切日を過ぎたものは,プロジェクト進捗管理画面にそのタスク名と締切日からの経過日数が表示される。

Sサービスでは,半年ごと及び新機能リリース前に診断ツールXによる脆弱性診断を実施することにしている。診断ツールXは,送信したリクエストとそれに対するレスポンスから脆弱性を検出する。

Sサービスでは,HTTPレスポンスヘッダーに Content Security Policy (CSP) を設定している。図1に,SサービスのHTTPレスポンスヘッダーの例を示す。

図1 SサービスのHTTPレスポンスヘッダーの例
図の説明テキスト
HTTP/1.1 200 OK
Cache-Control: no-store
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: (省略)
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=31536000; includeSubDomains
Set-Cookie: JSESSIONID=e962879ef251f2117460cf0d5ce714e3; Secure; HttpOnly
Content-Security-Policy: default-src 'self';
Content-Length: 31337

図1の設定では,リソースの読込みとスクリプトの実行に関する動作は次のようになる。

  • Sサービス以外のドメインからのリソースの読込み: a
  • scriptタグ内に直接記述されたスクリプトの実行: b

〔インシデントの発生とその調査〕

ある日,Sサービスを利用しているB社の管理者からH社に対して,“Sサービスの一般利用者であった元従業員ZのローカルPC上に,元従業員Zが割り当てられていなかったプロジェクトのファイルが保存されていたので,Sサービスに不具合がないか調査してほしい”との依頼があった。

Sサービスのシステム担当者であるUさんは,ログを確認するとともに,B社の許可を得た上で,B社の管理者の利用者IDを使ってログインし,幾つかの画面を確認した。そのうち,プロジェクト進捗管理画面のHTMLを図2に,そのHTMLが参照していた F1234567890.xlsx というファイルをテキストエディターで開いたときの内容を図3に示す。

図2 プロジェクト進捗管理画面のHTML
図の説明テキスト
<html>
<head>
  <meta charset="UTF-8">
  <title>プロジェクト進捗管理</title>
  <link href="/static/css/style.css" rel="stylesheet" type="text/css">
  <script src="/static/js/action.js"></script>
</head>
<body>
  <h1>プロジェクト進捗管理(プロジェクト ID:P00395000)</h1>
  (省略)
  <div name="alert">
    <div name="alert-title">期限切れタスク一覧</div>
    <div name="alert-description">
      次のタスクが締切日を過ぎています。<br>
    </div>
    <ul className="delayed-task">
      <li>G社のコンペ資料作成(締切日過ぎ 1 日)</li>
      <li>G社の業界分析(締切日過ぎ 4 日)</li>
      <li>個人タスク<script src="/files/F1234567890.xlsx"></script>(締切日過ぎ 5 日)</li>
    </ul>
  </div>
  (省略)
</body>
</html>
図3 F1234567890.xlsx の内容
図の説明テキスト
(async function() {
  const response = await fetch("/management/role");
  const text = await response.text();
  // 次の 2 行で csrf_token を取得
  const tokenMatch = text.match(/id="csrf_token"[^>]*value="([^"]+)"/);
  const csrfToken = tokenMatch[1];
  await fetch("/management/roleset", {
    method: "POST",
    // POST メソッドのリクエスト body
    body: new URLSearchParams({
      "csrf_token": csrfToken,
      "is_admin": "1",
      "user_id": "U00331001"
    })
  });
})();

注記 整形とコメントの追加は、Uさんによるものである。

Uさんは、調査の結果、図4に示す攻撃が実行されていたことを確認した。

図4 実行されていた攻撃
図の説明テキスト
  1. 元従業員Zの利用者IDでアクセスできるスレッドに,F1234567890.xlsxをアップロードした。
  2. 当該利用者IDで,タスク管理画面から c に次の文字列を指定して,タスクを登録した。
    文字列: d
  3. その後,2で登録したタスクが次の条件を満たしたときに, e がプロジェクト進捗管理画面にアクセスした。
    条件:未完了の状態で,かつ, f
  4. 3の結果,図2のHTMLが e のWebブラウザに出力された。
  5. 4の結果,図3のスクリプトが実行された。
  6. 5の結果,元従業員Zの利用者IDであったU00331001に対して次の処理が行われた。
    処理: g
    (省略)
  7. 元従業員Zの利用者IDで,調査依頼の発端となったファイルをダウンロードした。

Uさんは、図4の項番2と類似した文字列が指定されたタスクが登録されていないかどうかを確認したところ、完了済みタスクの中に類似したものがあることを確認した。しかし、このタスクによる攻撃は、CSPの設定で防御できていた。
Uさんは、攻撃者がこの失敗の原因を分析し、失敗したときに使用した文字列に工夫を加えたものと推測した。

〔インシデントへの対応及び攻撃への対策〕

(1) 今回のインシデントへの対応として、h
(2) 図4の項番4について、類似の問題がないかどうか、Sサービス全体を確認したところ、問題は1箇所だけだったので、表1の機能のうち、iについて、必要な処理を追加する。なお、この処理が行われていないという脆弱性は、診断ツールXでは検知されない。

〔開発プロセスの見直し検討〕

Uさんは、図4の項番4の脆弱性のように診断ツールXで検知されないものであっても、検知できる可能性のある検査として、次の二つも実施するという開発プロセスの見直し案を作成した。

  • SAST
  • j

Uさんは、開発プロセスの見直し案について承認を得て、見直しに着手した。

設問と解答・解説

設問1

本文中のabに入れる適切な字句を、“できる”、“できない”のいずれかでそれぞれ答えよ。

(1)

模範解答

できない

採点基準(配点 5点)

正確性(内容)(5点)

  • 5: 「できない」と正確に解答している。
  • 2: 「できない」という意図は伝わるが、指定の形式と異なる表記となっている。
  • 0: 「できる」と解答している、または無解答。

解説

Content Security Policy (CSP) は、クロスサイトスクリプティング(XSS)などの攻撃を防ぐための仕組みです。
設問では、CSPの設定によるリソース読み込みの制御が問われています。

  • スクリプトなどの実行において、許可されたドメイン以外からの読み込みはできないようになります。
  • この制限により、攻撃者が用意した外部の悪意あるスクリプトが実行されるリスクを低減できます。

高得点のポイント

  • 設問の指定通り「できない」と正確に解答すること。

(2)

模範解答

できない

採点基準(配点 5点)

正確性(内容)(5点)

  • 5: 「できない」と正確に解答している。
  • 2: 「できない」という意図は伝わるが、指定の形式と異なる表記となっている。
  • 0: 「できる」と解答している、または無解答。

解説

Content Security Policy (CSP) において、default-srcscript-src などのディレクティブを適切に設定することで、予期せぬリソースの読み込みや実行を防ぐことができます。

  • 本文中の設定では、インラインスクリプトの実行や、許可されていないドメインへのデータ送信はできないように制御されています。
  • CSPによる緩和効果を正確に理解することが重要です。

高得点のポイント

  • 設問の指定通り「できない」と正確に解答すること。

設問1は,正答率がやや低かった。Content Security Policy (CSP)を理解することは,堅牢なWebシステムを開発及び構築する上で重要である。リソース読込みの制御を適切に行うために,CSPの内容や緩和効果について理解を深めてほしい。

設問2

(1)

図3のスクリプトは、表1中のどの機能を悪用するものか。機能名を答えよ。

模範解答

ロール管理

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「ロール管理」と正確に解答している。
  • 1: 「ロール管理」の意図は伝わるが、余分な文字が含まれるなどの軽微な表記揺れがある。
  • 0: 不正確である、または無解答。

解説

図3のスクリプトは、利用者の権限を不正に操作する攻撃(例えば、権限昇格など)を意図しています。

  • スクリプトの内容を確認すると、HTTPリクエストを通じてユーザーの役割(ロール)を変更しようとする処理が見受けられます。
  • したがって、表1に記載されている機能のうち、この攻撃が悪用しているのはロール管理機能です。

高得点のポイント

  • 表1の機能一覧から「ロール管理」を正確に抜き出して解答すること。

(2)

図4中のcに入れる適切なタスクの項目を、表1中の字句を用いて答えよ。

模範解答

タスク名

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「タスク名」と正確に解答している。
  • 1: 「タスク名」の語句を含むが、余分な文字が含まれるなど完全な抜き出しになっていない。
  • 0: 不正確である、または無解答。

解説

図4に示されている攻撃のシナリオにおいて、スクリプトが埋め込まれている箇所を特定する必要があります。

  • 攻撃者は、ユーザーが閲覧する画面の特定の入力フィールドに悪意あるスクリプトを挿入します。
  • 表1のタスク情報に関連する項目の中で、文字列が入力・表示される「タスク名」が標的となっています。

高得点のポイント

  • 表1に存在するタスクの項目から「タスク名」を正確に解答すること。

(3)

図4中のdに入れる適切な文字列を、図2から抜き出して答えよ。

模範解答

個人タスク

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「個人タスク<script src="/files/F1234567890.xlsx"></script>」と正確に抜き出している。
  • 1: 対象の文字列を特定しているが、HTMLタグの一部が欠落しているなど、軽微な転記ミスがある。
  • 0: 不正確である、または無解答。

解説

図2の通信記録や画面表示の内容から、実際に挿入されたペイロード(悪意ある文字列)を特定します。

  • 攻撃者は、タスク名として通常のテキストに加えて、外部のファイルを読み込ませる <script> タグを埋め込んでいます。
  • 該当する文字列は「個人タスク」です。

高得点のポイント

  • 図2から対象の文字列を、HTMLタグを含めて一言一句違わず正確に抜き出すこと。

(4)

図4中のeに入れる適切な字句を答えよ。

模範解答

管理者

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「管理者」と正確に解答している。
  • 1: 「管理者」という意図は伝わるが、不必要な修飾語が含まれている。
  • 0: 不正確である、または無解答。

解説

攻撃の目的は、自身の権限を昇格させることです。

  • 一般利用者の権限では実行できない操作を行うため、攻撃者はスクリプトを利用して自身のロールを上位のものに変更しようとします。
  • システムにおいて上位の権限を持つロールは「管理者」です。

高得点のポイント

  • 文脈を正しく読み取り、「管理者」という権限名(ロール名)を解答すること。

(5)

図4中のfに入れる適切な字句を答えよ。

模範解答

タスクの締切日を過ぎる。

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「タスクの締切日を過ぎる。」と正確に解答している。
  • 1: 内容は合致しているが、文末の句点が抜けているなどの軽微な表記揺れがある。
  • 0: 不正確である、または無解答。

解説

図4の攻撃シナリオでは、スクリプトが実行されるタイミングや条件が問われています。

  • 埋め込まれたスクリプトは、特定のイベントが発生した際に発火するように設計されています。
  • 本文及び図の状況から、その条件は「タスクの締切日を過ぎる。」というトリガーによるものであることが読み取れます。

高得点のポイント

  • 攻撃シナリオのフローを理解し、「タスクの締切日を過ぎる。」という事象を正確に記述すること。

(6)

図4中のgに入れる適切な字句を答えよ。

模範解答

利用者のロールを管理者に設定する。

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「利用者のロールを管理者に設定する。」と正確に解答している。
  • 1: 意図は合致しているが、助詞の違いなど軽微な表記揺れがある。
  • 0: 不正確である、または無解答。

解説

スクリプトが実行された結果として、システム上でどのような状態変更が行われるかが問われています。

  • 図3のスクリプトの処理内容を解読すると、対象ユーザーのロール設定を更新するAPIが呼び出されています。
  • その結果、「利用者のロールを管理者に設定する。」という不正な状態変更が成立します。

高得点のポイント

  • スクリプトの最終的な目的である「利用者のロールを管理者に設定する。」という動作を過不足なく解答すること。

(7)

本文中の下線①について、工夫の内容を、具体的に答えよ。

模範解答

図3のスクリプトをSサービス内にアップロードする工夫

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: スクリプトをSサービス(同一オリジン)内にアップロードするという手法を正確かつ具体的に記述している。
  • 1: Sサービス内へのアップロードに触れているが、記述がやや抽象的である。
  • 0: スクリプトの配置場所に関する工夫について言及がない。

論理性(構造)(1点)

  • 1: 攻撃の目的を達成するための工夫として、文脈的に妥当な形で論理的に説明できている。
  • 0: 説明の論理展開が不自然である、または意味が通じない。

解説

CSPによるスクリプト実行制限を回避するために攻撃者が行った具体的な手法が問われています。

  • 外部ドメインからのスクリプト読み込みがCSPによって禁止されている場合、攻撃者は許可されている同一オリジン(Sサービス内)にスクリプトを配置する必要があります。
  • そのため、ファイルアップロード機能などを悪用して「図3のスクリプトをSサービス内にアップロードする工夫」を行っています。
  • これにより、CSPの制限をすり抜けて悪意あるスクリプトを読み込ませることに成功しました。

高得点のポイント

  • 知識・理解度(内容): スクリプトをSサービス(同一オリジン)内に配置するという点を明記できているか。
  • 論理性(構造): 攻撃者の意図と手法が論理的な文脈で記述されているか。

設問2は,(1)〜(4)の正答率が高かった。図3及び図4から攻撃内容を読み取ることができる受験者が多かった。一方で,(5)の正答率がやや低かった。CSPによる制御を回避する攻撃手法について考察することは,攻撃者によるスクリプト実行を防ぐ対策を立案する上で重要である。CSPの仕組みについて理解を深めてほしい。

設問3

(1)

本文中のhに入れる追加すべき処理の内容を、具体的に答えよ。

模範解答

アップロードされたファイルの形式が拡張子と整合しているかをチェックする。

採点基準(配点 4点)

知識・理解度(内容)(2点)

  • 2: ファイル形式と拡張子の整合性チェックを明記している。
  • 1: ファイルの検証に触れているが、具体性(形式と拡張子の比較)が欠けている。
  • 0: 該当する知識が示されていない。

論理性(構造)(2点)

  • 2: 処理を追加する目的と方法が論理的に結びついている。
  • 1: やや論理の飛躍があるが、意図は読み取れる。
  • 0: 論理的に破綻している。

解説

不正なスクリプトファイル(拡張子を偽装したファイルなど)のアップロードを防ぐための適切な対策が問われています。

  • アプリケーションは、アップロードされたファイルが本当に許可された形式であるかを確認する必要があります。
  • 単に拡張子を見るだけでなく、ファイルの中身やMIMEタイプなどを検証し、「アップロードされたファイルの形式が拡張子と整合しているかをチェックする。」処理を追加することが重要です。

高得点のポイント

  • 知識・理解度(内容): 「ファイルの形式」と「拡張子」の整合性チェックという具体的な対策手法を明記できているか。
  • 論理性(構造): セキュアプログラミングの観点から、どのような処理をシステムに追加すべきかが明確かつ論理的に記述されているか。

(2)

本文中のiに入れる適切な機能名を答えよ。

模範解答

プロジェクト進捗管理

採点基準(配点 4点)

正確性(内容)(4点)

  • 4: 「プロジェクト進捗管理」と正確に解答している。
  • 2: 「プロジェクト進捗管理」を含むが、余分な文字が含まれるなど完全な抜き出しになっていない。
  • 0: 不正確である、または無解答。

解説

インシデントの影響範囲や、対策を講じるべきシステムの機能を特定する設問です。

  • 本文の記述や表1の機能一覧から、悪用されたタスク名等の情報が含まれる機能領域を探します。
  • 該当するのは「プロジェクト進捗管理」機能です。

高得点のポイント

  • 表1などの記述から「プロジェクト進捗管理」という機能名を正確に抜き出して解答すること。

(3)

本文中の下線②について、追加すべき処理の内容を、具体的に答えよ。

模範解答

出力時にエスケープ処理を施す。

採点基準(配点 4点)

知識・理解度(内容)(2点)

  • 2: 出力時のエスケープ処理を明確に記述している。
  • 1: エスケープ処理には触れているが、タイミング(出力時)などの記述が抜けている。
  • 0: 該当する知識が示されていない。

論理性(構造)(2点)

  • 2: 対策として論理的に妥当な構成で記述されている。
  • 1: やや説明が不足しているが、意図は伝わる。
  • 0: 論理性が認められない。

解説

クロスサイトスクリプティング(XSS)の根本的な解決策となるプログラミング上の対応が問われています。

  • ユーザーが入力した文字列をそのままブラウザに出力すると、悪意あるスクリプトが実行される危険性があります。
  • この脆弱性を解消するためには、HTMLタグなどの特別な意味を持つ文字を無害化する処理、すなわち「出力時にエスケープ処理を施す。」ことが必須です。

高得点のポイント

  • 知識・理解度(内容): XSS対策の基本である「エスケープ処理」というキーワードを含められているか。
  • 論理性(構造): どのタイミングで処理を行うべきか(「出力時」など)を具体的に記述できているか。

設問4

本文中のjに入れる適切な検査方法を、具体的に答えよ。

模範解答

Sサービスの仕様を理解した専門家による脆弱性検査

採点基準(配点 7点)

知識・理解度(内容)(4点)

  • 4: 専門家による手動の脆弱性検査(またはSサービスの仕様に基づく検査)の必要性を詳細に記述している。
  • 3: 専門家による検査に言及しているが、仕様理解の観点がやや弱い。
  • 2: 脆弱性検査の実施には触れているが、専門家による手動検査という点が不明確である。
  • 1: 検査に関する基礎的な記述のみにとどまる。
  • 0: 該当する知識が示されていない。

説得力(考察)(3点)

  • 3: 開発プロセスにおける課題解決策として、非常に高い説得力を持って記述されている。
  • 2: 対策としての説得力は認められるが、やや一般的な記述にとどまる。
  • 1: WAFの導入やログ分析など、運用面での対策と混同しており説得力に欠ける。
  • 0: 全く説得力がない。

解説

システム開発プロセスにおいて、再発防止や未知の脆弱性を発見するために有効な検査方法が問われています。

  • 一般的な自動診断ツールでは、アプリケーションのビジネスロジックや権限管理の不備(認可制御の欠陥など)を発見することが困難です。
  • そのため、対象システム(Sサービス)の仕様を深く理解した専門家による手動の脆弱性検査(ペネトレーションテストなど)を実施することが求められます。

高得点のポイント

  • 知識・理解度(内容): 「専門家による脆弱性検査」という適切なテスト手法を提示できているか。
  • 説得力(考察): 単なる検査ではなく、「Sサービスの仕様を理解した」という前提条件を含め、開発プロセスの改善策として説得力のある記述ができているか。

設問4は,正答率が低かった。脆弱性を検出し修正するための開発プロセスを出題したが,“ログ分析を行う”や“IDの棚卸しを行う”,“アノマリ検知の仕組みを導入する”などの運用プロセスでの対策,“権限チェックを行う”,“多要素認証の仕組みを導入する”などの修正機能の追加,及び“WAFを導入する”などのセキュリティ製品導入に関する解答が散見された。開発プロセスに対する理解を深めてほしい。