問題はIPAからご確認ください。
https://www.ipa.go.jp/shiken/mondai-kaiotu/2021r03.html#aki_sc
答えはIPAの回答例となります。
設問1
問題 本文中の「a」に入れる適切な字句を答えよ

セッション管理を行わないREST APIはステートレスです
ステートレス性:クライアントからのリクエストは、それ以前のリクエストの状態に依存せず、リクエストに必要なすべての情報をそのリクエスト自体に含める必要がある、という性質。
サーバー側で「記憶しない」で動作することで、サーバーがユーザーの状態を一切覚えない仕様です
答え:ステートレス
設問2

(1)
問題 表3中の「b」に入れる適切な数値を、小数点以下を四捨五入して、整数で答えよ。

文字列Xは数字4桁の文字列です
なので、0000 から 9999の10,000通りとなります。
設問に「平均的な認証成功までの時間」と記載されているので、
攻撃者は順番に 0000, 0001, 0002, … と試していきます。
どの番号が正解かは「一様にランダム」であり、最初でも最後でも同じ確率です。
なので、平均を取ると総数の半分である 5,000 回を試行回数として使います。
1秒間に10回試行できるので、5000÷10で「500]秒です
答え b:500
(2)
問題 表5中の下線①について、修正後のライブラリQで行うJWTの検証では、どのようなデータに対してどのような検証を行うか。検証対象となるデータと検証の内容を、それぞれ20字以内で答えよ。


ライブラリQの修正は、JWT 改ざんによるなりすましの脆弱性に関する対策案です。
JWTの構成要素はヘッダ(Header)・ペイロード(Payload)・署名(Signature) --図4参照--
今回の問題はJWT のヘッダを改ざんし、署名アルゴリズムを「RS256」から「NONE」に変更して、署名検証を無効化し、ペイロード内の利用者 ID を勝手に書き換えてなりすましができてしまっています。
なので検証はJWT のヘッダに含まれる alg の値が、NONEでないことを確認する。
答え データ:JWT ヘッダ内の alg に指定された値
内容 :NONE出ないことを検証する
(3)
問題 表5中の下線②について、P呼出し処理に追加すべき処理を、40字以内で具体的に答えよ。


項番2はmidに他の利用者IDをしているするとそのIDの情報を取得できてしまう問題です。
認証成功のユーザに発行されたJWTのペイロードに含まれる自身の利用者IDとAPIで取得する情報のmidが一致していなくても、情報を取得できてしまうことが問題となります。
答え:JWTに含まれる利用者IDがmidの値と一致するかどうかを検証する処理
(4)
問題 表5中の「c」に入れる適切な字句を、表2中の用語で答えよ



利用者APIの仕様にはstatusのパラメータは無いです
しかし攻撃者が勝手にstatusパラメータを追加してリクエストを送信してい待った場合に利用者情報を更新できてしまうバグのようです。
利用者APIの仕様を確認するとサービスLが共通モジュールPを呼び出して、共通モジュールPがサービスMを呼び出して処理を行うとなっていますので、処理を行っているのは共通モジュールPとなります。
(サービスLと間違えますね)

答え c:共通モジュールP
(5)
問題 表5中の「d」に入れる適切な処理内容を、30字以内で答えよ。


dは項番4の対策となります。
項番4は総当たり攻撃に対する対策ですので、したらですね
アカウントロックが無いと、総攻撃で簡単に突破されてしまいます。
しきい値が10にするともなっているので、10回失敗したら一定時間のアカウントロックする様に設定するんですね。
10回でも結構多い気がしますが、
答え:連続失敗回数がしきい値を超えたらアカウントをロックする処理
設問3
(1)
問題 図7中の下線③について、テストサーバに実装する仕組みを、35字以内で具体的に答えよ。

wgetは、Linuxなど利用されるコマンドラインツールで、Webページやファイルをダウンロードするのに使用されます。
今回のRさんがやろうとしていることを図6から判断すると下記になると思います
1:SシステムにHTTPリクエストのヘッダに”${図8コマンド}”を付けて送ります。
2:受け取ったSシステムの脆弱なJAVAライブラリが、入力された文字列に ${図8コマンド} パターンを見つけます。
3:Sシステムのライブラリは、文字列をJNDIルックアップであると認識し、指定されたテストサーバ”ldap://a2.b2.c2.d2:1389″にアクセスします。
4:LDAPサーバー(テストサーバー)は、JNDIルックアップに対して、リモートでコードを実行させるための特別なJAVAを応答します。
5:SシステムのJAVA環境は、応答に従ってリモートの悪意あるコードを実行します。
この際、Base64でエンコードされたペイロード(wget … コマンド)がデコードされ、Sシステム上でシェルコマンドとして実行されます。
6:”wget http://a2.b2.c2.d2/index.html”というコマンドがSシステムで実行されると、Sシステムからテストサーバーへ HTTPリクエストが送られます。
7:Rさんは、テストサーバのHTTPアクセスログにSシステムのIPアドレスからの記録があることを確認し、
リモートコード実行の脆弱性が存在することを証明します。
これで、記録があれば脆弱性があると判断できますね
答え:テストサーバのindex.htmlへのアクセスを記録し、確認する仕組み
(2)
問題 表6中の 「e」、「f」に入れる適切な字句を、図5中から選 び答えよ。

図6(3)に記載されてる「攻撃コードは、HTTPリクエストのx-api-versionヘッダの値として指定したHTTPリクエスト攻撃対象サーバに送信する」とあるので
答え e:Header
f:Header
(3)
問題 本文中の下線④の変更後の案について、表6中のルール1に記述すべきパターンを、図5の記述形式で答えよ。


表6の ルール1(変更前) は
検証対象:Header パターン:¥Wjndi¥W 動作:遮断
となっていて、「HTTPヘッダ内に jndi という文字列が含まれていたら遮断する」という意味です。
なので、jndi
の文字を大文字を混ぜて書かれると、検知できないです。
例:JNDI・Jndi・・・
マッチさせるためには下記となります
[jJ] or (j|J) ・・・jまたはJにマッチ
[nN] or (n|N) ・・・nまたはNにマッチ
[dD] or (d|D) ・・・dまたはDにマッチ
[iI] or (i|I) ・・・iまたはIにマッチ
¥W ・・・前後にこれを入れることにより、前後に英数字以外の空白や記号だった場合にマッチします
答え:¥W[jJ][nN][dD][iI]¥W
or:\W(j|J)(n|N)(d|D)(i|I)\W
(4)
問題 本文中の下線⑤について、WAF ルールの動作に “遮断” ではなく “検知”を設定することによる利点と、 “検知” に設定した際に被害を最小化するために実施すべき内容を、それぞれ25字以内で答えよ。

一般的にはいきなり遮断にすると、正常な通信なども検知して止めてしまう恐れがあります。
なので、大体は検知にして確認してから対象を遮断する様にします。
ただ、検知では遮断しないので本当の攻撃も通過してしまうので、検知したらアラームなどでわかるようにして、攻撃だった場合は遮断するようにする準備が必要です。
答え 利点:誤検知による遮断を防ぐことができる
内容:アラートを受信したら攻撃かどうかを精査する
コメント