令和7年度秋期 情報処理安全確保支援士(午後試験 問1)解説
テーマ: Webアプリケーションの脆弱性・Content Security Policy(CSP)・格納型XSS・同一オリジン・アクセス制御・CSRF対策・ファイルアップロード・セキュアプログラミング・SAST/脆弱性検査
この問題の全体像
本問は、ファイルアップロード機能とタスク名の表示処理を組み合わせて、CSPを回避しながら格納型XSSを成立させ、管理者の権限を悪用してロール変更処理を実行する攻撃を扱っています。個々の機能だけを見るのではなく、「アップロードしたファイルが同一オリジンから配信される」「タスク名がHTMLに未エスケープで出力される」「管理者が当該画面を閲覧する」という複数の条件をつなげて読むことが重要です。
表記について
「問題文からの引用」は、問題冊子の本文、表又は図から、解答根拠となる箇所を引用形式で示しています。引用に続く「着眼点・注目ポイント」で読み方を整理し、その後に正解と解説を示します。
関連記事(ほかの過去問解説を探す)
-
情報処理安全確保支援士 午後試験・過去問解説リンク集
年度・大問ごとの解説記事を一覧から選べます。別年度や別問題を続けて学習する場合に利用してください。
目次・設問ジャンプ
設問1 〔CSPの動作〕について
1. 空欄 a について
問題文からの引用
「Content-Security-Policy: default-src 'self';」および「Sサービス以外のドメインからのリソースの読込み:[ a ]」
着眼点・注目ポイント
default-src 'self' の 'self' は、対象ページと同じオリジンから取得するリソースだけを許可する指定です。ここでいうオリジンは、スキーム、ホスト名、ポート番号の組合せで判断されます。したがって、Sサービス以外のドメインに置かれた画像、スクリプト、スタイルシートなどは読み込めません。
- 正解: できない
-
解説:
default-srcは、個別の取得先ディレクティブが指定されていない場合の既定値です。本問ではscript-srcなどが別途指定されていないため、スクリプトについてもdefault-src 'self'が適用されます。Sサービス以外のドメインからの読込みは同一オリジンではないので、Webブラウザによってブロックされます。
2. 空欄 b について
問題文からの引用
「Content-Security-Policy: default-src 'self';」および「scriptタグ内に直接記述されたスクリプトの実行:[ b ]」
着眼点・注目ポイント
インラインスクリプトを許可するには、一般に script-src などで 'unsafe-inline'、nonce又はhashを明示する必要があります。本問のCSPにはそれらがありません。
- 正解: できない
-
解説:
<script>alert(1)</script>のようにHTMLのscript要素内に直接記述されたスクリプトは、CSPによって実行されません。ただし、ここで注意したいのは、'self'が「同一オリジンにあるスクリプトファイルの読込み」を許可している点です。攻撃者はこの差を利用し、インラインスクリプトではなく、Sサービス内へアップロードしたファイルを<script src="...">で読み込ませます。
試験対策メモ:
default-src 'self'は「同一オリジンなら安全」という意味ではありません。同一オリジン上に攻撃者が任意内容のファイルを置ける場合、そのファイルをスクリプトとして読み込むことでCSPが回避されることがあります。
aとbの切り分け: aは「取得元が許可されるか」、bは「HTML内へ直接記述したスクリプトが許可されるか」を問うています。
'self'は同一オリジンからの取得を許可しますが、インラインスクリプトを許可する指定ではありません。この違いが、設問2の攻撃手法につながります。
設問2 〔インシデントの発生とその調査〕について
1. (1) 図3のスクリプトが悪用する機能について
問題文からの引用
「表1のロール管理について、「管理者が、利用者のロールを設定する」とあります。また、図3では
/management/roleからCSRFトークンを取得し、/management/rolesetにis_admin=1と対象のuser_idをPOSTしています。」
着眼点・注目ポイント
図3の通信先と送信パラメータを、表1の機能説明と照合します。is_admin=1 は対象利用者を管理者に設定する値です。
- 正解: ロール管理
-
解説: 図3のスクリプトは、管理者向けのロール設定画面へアクセスしてCSRFトークンを取得し、そのトークンを付けてロール設定リクエストを送信する内容です。その結果、利用者ID
U00331001のロールが管理者へ変更されます。したがって、悪用されているのは表1の「ロール管理」機能です。
補足: CSRFトークンが実装されていても、同じオリジンで動作するXSSが成立すると、スクリプトから画面を取得してトークンを読み取れます。このため、CSRF対策だけではXSS経由の不正操作を防げません。
図3の処理を順に読むと: まずロール管理画面を取得し、そのレスポンス中からCSRFトークンを取り出します。次に、取得したトークン、is_admin=1、user_id=U00331001 をロール設定処理へ送信します。したがって、「CSRFトークンがあるから安全」と判断するのではなく、XSSによって同一オリジン内の情報を読み取られることまで考える必要があります。
2. (2) 空欄 c について
問題文からの引用
「当該利用者IDで、タスク管理画面から [ c ] に次の文字列を指定して、タスクを登録した。」
着眼点・注目ポイント
図2のプロジェクト進捗管理画面では、期限切れタスクの一覧にタスク名がHTMLに出力されています。図4の項番2で指定した文字列が、図2のHTMLに入り、script 要素として解釈される必要があります。
- 正解: タスク名
- 解説: 表1によるとタスクには「タスク名」「詳細説明」「担当者」「締切日」などの項目があります。このうち図2の期限切れタスク一覧に表示されているのはタスク名です。攻撃用文字列をタスク名として登録することで、プロジェクト進捗管理画面のHTMLへ文字列を混入させています。
3. (3) 空欄 d について
問題文からの引用
「図4中の [ d ] に入れる適切な文字列を、図2から抜き出して答えよ。」
着眼点・注目ポイント
設問は「図2から抜き出して」と指定しています。自由に同じ意味の文字列を作るのではなく、図2のHTML中に現れている攻撃用文字列を正確に転記します。
-
正解:
個人タスク<script src="/files/F1234567890.xlsx"></script> -
解説: この文字列は、通常のタスク名「個人タスク」の直後に、Sサービス上の
/files/F1234567890.xlsxを読み込むscript要素を付加したものです。図3から、このファイルの内容は表計算データではなくECMAScriptであると分かります。ここで重要なのは、拡張子ではなく、アップロードされたファイルの内容と、それを同一オリジンのスクリプトとして参照できるSサービスの仕様です。本問の状況では、この組合せによってCSPの'self'に適合するスクリプト読込みが成立します。
転記上の注意: 解答欄では、開始タグと終了タグ、
srcのパス、ファイル名を落とさず記述します。問題冊子の表記に従い、余分な文字を加えないことが重要です。
4. (4) 空欄 e について
問題文からの引用
「2で登録したタスクが次の条件を満たしたときに、[ e ] がプロジェクト進捗管理画面にアクセスした。」
着眼点・注目ポイント
図3のスクリプトは管理者向けロール管理機能へアクセスします。ロール管理は管理者だけが利用できるため、スクリプトを実行させる対象は管理者でなければなりません。
- 正解: 管理者
- 解説: 格納型XSSでは、攻撃者が登録したデータを別の利用者が閲覧したときにスクリプトが実行されます。本問では、管理者がプロジェクト進捗管理画面を閲覧することにより、管理者のログインセッションと権限で図3のスクリプトが動作します。
5. (4) 空欄 f について
問題文からの引用
「条件:未完了の状態で、かつ、[ f ]」
着眼点・注目ポイント
表1のプロジェクト進捗管理には、「未完了のタスクのうち締切日を過ぎたものは、プロジェクト進捗管理画面にそのタスク名と締切日からの経過日数が表示される」とあります。
- 正解: タスクの締切日を過ぎる。
- 解説: 攻撃用タスク名をプロジェクト進捗管理画面へ表示させるには、表1に示された表示条件を満たす必要があります。したがって、タスクを未完了のままにし、締切日を過ぎた状態にします。
6. (4) 空欄 g について
問題文からの引用
「5の結果、元従業員Zの利用者IDであったU00331001に対して次の処理が行われた。処理:[ g ]」
着眼点・注目ポイント
図3のPOSTデータには、is_admin が 1、user_id が U00331001 と指定されています。表1には is_admin=1 が管理者を意味すると明記されています。
- 正解: 利用者のロールを管理者に設定する。
- 解説: スクリプトは、閲覧した管理者の権限でロール設定処理を呼び出し、元従業員Zの利用者IDのロールを管理者に変更します。攻撃者はその後、このIDでアクセスして管理者権限を利用できます。
7. (5) 下線①の工夫について
問題文からの引用
「攻撃者がこの失敗の原因を分析し、失敗したときに使用した文字列に①工夫を加えることによって図4の項番2の文字列を作成し、攻撃を成功させたと推測した。」
着眼点・注目ポイント
CSPによってHTML内へ直接記述したスクリプトは実行できません。一方、default-src 'self' によりSサービス自身からのスクリプト取得は許可されています。また、Sサービスにはファイルアップロード機能があり、アップロード済みファイルは /files/[一意のファイル識別子].[拡張子] で参照できます。
- 正解: 図3のスクリプトをSサービス内にアップロードする工夫
-
解説: 攻撃者は、図3のECMAScriptを内容とするファイルを、許可対象の拡張子を付けてSサービスへアップロードします。その上で、タスク名にはインラインスクリプトそのものではなく、
<script src="/files/F1234567890.xlsx"></script>のような外部スクリプト読込み形式を埋め込みます。読込み元はSサービス自身なので、'self'の条件を満たし、CSPを回避できます。
不十分になりやすい解答: 「拡張子をxlsxにする」だけでは、攻撃成立の中心である「Sサービスと同一オリジンからスクリプトを読み込ませる」という工夫が表現されません。アップロード先と同一オリジン読込みの関係まで示すと、根拠が明確になります。
設問3 〔インシデントへの対応及び攻撃への対策〕について
1. (1) 空欄 h について
問題文からの引用
「アップロードされたファイルが許可された拡張子であることのチェックに加えて、次の処理を追加する。処理:[ h ]」
着眼点・注目ポイント
本問では、ファイル名は .xlsx である一方、ファイルの内容はECMAScriptでした。拡張子だけを確認しても、ファイルの実体までは保証できません。
- 正解: アップロードされたファイルの形式が拡張子と整合しているかをチェックする。
-
解説: 拡張子はファイル名の一部にすぎず、利用者が任意に変更できます。そのため、アップロードを受け付けるサーバ側でファイルの内容を検査し、拡張子が示す形式と実際の形式が一致しているかを確認します。本問では、ECMAScriptを内容とするファイルに
.xlsxを付けていたため、この検査によって不整合を検出できます。
補足対策: 実務では、内容検査に加えて、アップロードファイルを別オリジンから配信する、強制ダウンロード用の
Content-Disposition: attachmentを付ける、適切なContent-TypeとX-Content-Type-Options: nosniffを設定する、といった多層防御も検討します。ただし、本設問で直接求められているのは「拡張子と実ファイル形式の整合性確認」です。
2. (2) 空欄 i について
問題文からの引用
「図4の項番4について、類似の問題がないかどうか、Sサービス全体を確認したところ、問題は1箇所だけだったので、表1の機能のうち、[ i ] について、②必要な処理を追加する。」
着眼点・注目ポイント
図4の項番4は、図2のHTMLがブラウザへ出力される場面です。図2の画面タイトルと表1の機能名を照合します。
- 正解: プロジェクト進捗管理
- 解説: 問題のある出力箇所は、期限切れタスクを表示する「プロジェクト進捗管理画面」です。したがって、必要な修正対象は表1の「プロジェクト進捗管理」機能です。格納型XSSが発現する直接の原因は、保存されたタスク名をHTMLへ出力する際に、データとHTMLの構文を分離できていないことにあります。
3. (3) 下線②の必要な処理
問題文からの引用
「表1の機能のうち、[ i ] について、②必要な処理を追加する。」
着眼点・注目ポイント
攻撃用文字列中の <、>、" などがHTMLの一部として解釈されたため、script 要素が生成されています。これらを文字データとして扱わせる必要があります。
- 正解: 出力時にエスケープ処理を施す。
-
解説: 図2では、タスク名に含まれる
<script ...>がHTML要素として解釈されたことが問題です。タスク名をHTML本文へ出力するときに、<を<、>を>などへ変換すれば、ブラウザはそれをタグではなく文字列として表示します。対策を「登録時の文字列削除」ではなく「出力時のエスケープ」とするのは、同じデータでも出力先の文脈によって安全な変換方法が異なるためです。
重要: エスケープ方法は出力先の文脈によって異なります。HTML本文、HTML属性、JavaScript文字列、URLでは必要な処理が異なるため、「入力時に一律除去」ではなく「出力先に応じたエスケープ」が基本です。可能であれば、テンプレートエンジンの自動エスケープや、
textContentのように文字列として設定するAPIを用います。
設問4 〔開発プロセスの見直し〕について
1. 空欄 j について
問題文からの引用
「図4の項番4の脆弱性のように診断ツールXで検知されないものであっても、検知できる可能性のある検査として、次の二つも実施するという開発プロセスの見直し案を作成した。・SAST ・[ j ]」
着眼点・注目ポイント
診断ツールXは、送信したリクエストとレスポンスから脆弱性を検出する方式です。しかし本問の攻撃は、ファイルアップロード、タスク登録、期限経過、管理者による別画面の閲覧という業務フローをまたいで成立します。単純なリクエスト/レスポンスの検査だけでは、攻撃条件を再現できない可能性があります。
- 正解: Sサービスの仕様を理解した専門家による脆弱性検査
- 解説: SASTはソースコードを静的に解析し、危険なデータフローや未エスケープ出力などを検出する手法です。これに加えて、Sサービスの機能、権限、画面遷移、ファイル配信方法、期待される業務フローを理解した専門家が検査すれば、複数機能の組合せで成立する脆弱性を発見できる可能性が高まります。
解答表現のポイント: 単に「ペネトレーションテスト」とだけ書くよりも、「Sサービスの仕様を理解した専門家」が実施することを含めます。本問が重視しているのは、ツールでは再現しにくい業務ロジックと複合的な攻撃経路を人が検証する点です。
SASTとの役割分担: SASTでは、利用者入力がエスケープされずにHTMLへ出力されるデータフローなどを、ソースコードから検出できる可能性があります。一方、専門家による検査では、ファイルアップロード、期限切れタスクの表示条件、管理者の画面閲覧、ロール管理という複数機能のつながりを、Sサービスの仕様に沿って確認できます。二つを併用する理由は、検査の着眼点が異なるからです。
選択式設問について
本問には、ア・イ・ウ・エなどから選ぶ選択式の設問はありません。そのため、選択肢ごとの解説はありません。空欄補充や記述式については、正解だけでなく、問題文・表・図のどこを根拠に判断するかを各項目で示しています。
攻撃成立の流れ
- 攻撃者は、元従業員Zの一般利用者IDでアクセスできるスレッドへ、図3のECMAScriptを中身とするファイルを
.xlsxとしてアップロードする。 - 攻撃者は、タスク名に
個人タスク<script src="/files/F1234567890.xlsx"></script>を登録する。 - タスクを未完了のままにして締切日を経過させ、プロジェクト進捗管理画面の期限切れタスク一覧へ表示させる。
- 管理者が同画面を閲覧すると、タスク名が未エスケープでHTMLへ出力され、
script要素として解釈される。 - 読込み先はSサービス自身の
/files/...なので、CSPのdefault-src 'self'に適合し、図3のスクリプトが実行される。 - スクリプトは管理者のセッションでロール管理画面を取得し、CSRFトークンを抽出する。
- 抽出したCSRFトークンを付けてロール設定をPOSTし、
U00331001を管理者に変更する。 - 攻撃者は管理者権限を得たIDで、調査依頼の発端となったファイルをダウンロードする。
学習上の重要ポイント
1. CSPはXSS対策の補助であり、出力エスケープの代替ではない
CSPはスクリプトの実行元を制限する有効な多層防御ですが、同一オリジン上に攻撃者が制御できるファイルを配置できる設計では、'self' が悪用される可能性があります。根本対策は、利用者入力をHTMLへ出力する際の文脈依存エスケープです。
2. ファイルアップロードでは拡張子だけを信用しない
ファイル名の末尾は利用者が自由に付けられます。拡張子の許可リストに加えて、実ファイル形式の検査、保存時のファイル名再生成、危険な形式の拒否、別オリジン配信などを組み合わせます。
3. XSSが成立するとCSRFトークンを読み取られる
CSRFトークンは、第三者サイトからのリクエストを防ぐ仕組みです。同一オリジンで実行される悪意あるスクリプトは、画面やDOMからトークンを取得できるため、XSSへの対策にはなりません。
4. 複数機能をまたぐ業務ロジックを検査する
本問の攻撃は「ファイルアップロード」「タスク管理」「プロジェクト進捗管理」「ロール管理」の組合せで成立します。単一画面への自動診断だけでなく、SASTと、仕様を理解した専門家によるシナリオベースの検査を組み合わせることが重要です。
解答一覧
- 設問1: a できない、b できない
-
設問2: (1) ロール管理、(2) c タスク名、(3) d
個人タスク<script src="/files/F1234567890.xlsx"></script>、(4) e 管理者、f タスクの締切日を過ぎる、g 利用者のロールを管理者に設定する、(5) 図3のスクリプトをSサービス内にアップロードする工夫 - 設問3: (1) h アップロードされたファイルの形式が拡張子と整合しているかをチェックする、(2) i プロジェクト進捗管理、(3) 出力時にエスケープ処理を施す
- 設問4: j Sサービスの仕様を理解した専門家による脆弱性検査
参照資料
- IPA「令和7年度秋期 情報処理安全確保支援士試験 午後試験 問1」(問題文)
- IPA「令和7年度秋期 情報処理安全確保支援士試験 解答例」(問1の解答例・出題趣旨)