マスアサインメント対策
あるフレームワークは,HTTP 要求のパラメータを名前が一致するオブジェクトの属性に自動的に割り当てる。利用者オブジェクトには name,email のほかに権限を表す role 属性がある。プロフィール編集画面は name と email だけを送信するが,攻撃者が要求に role=admin を追加したところ,自分の権限が昇格した。対策として,最も適切なものはどれか。
- ア送信された全パラメータをサーバ側で HTML エスケープしてから属性に割り当てる。
- イ自動割当ての対象を,その画面が更新してよい項目(name,email)だけに限定する専用の入力オブジェクトを用い,role などを対象から除外する。
- ウ編集フォームから role の hidden フィールドを取り除き,画面から role が送られないようにする。
- エrole 属性を更新する要求に対してだけ CSRF トークンの検証を追加する。
正解と解説を見る
正解 イ
この問題の基礎知識
- マスアサインメントは,要求のパラメータを名前が一致するオブジェクトの属性に自動的に割り当てるフレームワークの機能を悪用し,更新を想定していない属性を書き換える攻撃である。
- 画面の入力項目や hidden フィールドによる制限は,攻撃者が要求を直接組み立てれば回避できる。セキュリティ上の制御は必ずサーバ側で行う。
- 更新してよい属性を明示する許可リスト方式や,編集してよい項目だけをもつ専用の入力オブジェクトを使う方式が基本の対策であり,許可リストは拒否リストより漏れが生じにくい。
- HTML エスケープは XSS 対策,CSRF トークンは第三者のサイトを起点とする要求への対策であり,利用者本人が要求に項目を追加する攻撃には効果がない。
ア送信された全パラメータをサーバ側で HTML エスケープしてから属性に割り当てる。
エスケープは XSS 対策であり,role という項目が割り当てられること自体は止められない。問題は値の文字ではなく割当て対象の範囲なので効果がない。
イ自動割当ての対象を,その画面が更新してよい項目(name,email)だけに限定する専用の入力オブジェクトを用い,role などを対象から除外する。正解
更新を許す属性をホワイトリストで明示し,権限などの項目を自動バインドから外すのがマスアサインメントの基本対策である。要求に余計な項目があっても割り当てられない。
ウ編集フォームから role の hidden フィールドを取り除き,画面から role が送られないようにする。
攻撃者は画面を介さず要求を直接組み立てて role を付加できる。クライアント側のフォームを変えてもサーバ側の自動割当ては防げない。
エrole 属性を更新する要求に対してだけ CSRF トークンの検証を追加する。
CSRF トークンは第三者サイト起点の要求を防ぐもので,利用者本人が項目を追加する本事例は防げない。対象とする脅威が異なる。
検証用の出典出典照合済み
OWASP Mass Assignment Cheat Sheet / CWE-915 Improperly Controlled Modification of Dynamically-Determined Object Attributes照合の根拠(5 件)
- イ(正解): 呼び出し元が編集してよい項目だけをもつ専用の入力オブジェクトを使う
Prefer dedicated input objects, such as Data Transfer Objects (DTOs), containing only fields the caller may edit; see Spring's model design guidance .
OWASP Mass Assignment Cheat Sheet · Solutions(新しいタブで開きます) - イ(正解): 変更してよい属性を許可リストで指定する
If available, use features of the language or framework that allow specification of allowlists of attributes or fields that are allowed to be modified. If possible, prefer allowlists over denylists.
CWE-915 · Potential Mitigations(新しいタブで開きます) - ウ(誤り): 攻撃者は開発者が想定しないパラメータを自分で追加できるので,フォームから項目を除いても防げない
Attackers can sometimes use this methodology to create new parameters that the developer never intended which in turn creates or overwrites new variable or objects in program code that was not intended.
OWASP Mass Assignment Cheat Sheet · Definition(新しいタブで開きます) - ア(誤り): 問題は値の文字ではなく,更新してはならない項目(role など)が割り当てられることなので,エスケープでは防げない
Mass assignment is exploitable when attacker-controlled input can initialize or update fields that the caller is not authorized to change, such as a role or account owner.
OWASP Mass Assignment Cheat Sheet · Exploitability(新しいタブで開きます) - エ(誤り): CSRF は第三者が利用者のブラウザに操作させる攻撃で,利用者本人が項目を追加する本事例とは脅威が異なる
A Cross-Site Request Forgery (CSRF) attack occurs when a malicious web site, email, blog, instant message, or program tricks an authenticated user's web browser into performing an unwanted action on a trusted site.
OWASP Cross-Site Request Forgery Prevention Cheat Sheet · Introduction(新しいタブで開きます)