脆弱性
マスアサインメント (Mass Assignment)
別称: オートバインディング脆弱性, オブジェクトインジェクション
定義
アプリがクライアントから渡されたフィールドを無検証で内部オブジェクトのプロパティに紐付け、攻撃者が本来制御すべきでない属性を書き換えてしまう脆弱性。
マスアサインメントは、Rails、Spring、ASP.NET、NestJS、Django などのフレームワークが、明示的な許可リストなしに、受信した JSON やフォームフィールドをモデル属性へ自動マッピングする際に発生します。攻撃者は isAdmin、role、balance、tenantId などの追加プロパティを含めることで、サーバーがそれらを DB に書き込んでしまいます。割り当てが暗黙的なためコードレビューでは見落とされがちで、autobinding やオブジェクトインジェクションとも呼ばれます。対策には、明示的な DTO/入力スキーマ、バインド可能フィールドの厳格な許可リスト、内部専用属性と外部バインド可能モデルの分離、想定外のキーを送るセキュリティテストが有効です。
例
- /api/users に {"name":"Bob","isAdmin":true} を送って管理者に昇格する。
- POST で注文に隠し割引フィールドを付加し、価格ロジックを回避する。
関連用語
アクセス制御の不備
認可ルールが欠落または誤って適用され、ユーザーが本来の権限を超えた操作やデータにアクセスできてしまう脆弱性カテゴリ。
パラメータ改ざん
攻撃者が HTTP リクエスト、Cookie、隠しフォームフィールドのパラメータを書き換え、アプリの挙動を操作する攻撃。
安全でないデシリアライゼーション
アプリが信頼できないデータをデシリアライズすることで、攻撃者が任意オブジェクトを生成し、しばしばリモートコード実行に至る脆弱性。
Input Validation
Input Validation — definition coming soon.
API Security
API Security — definition coming soon.