機能単位のアクセス制御の欠如

C#の機能単位のアクセス制御の欠如

説明

ユーザーやアカウントを削除する管理機能で適切な権限チェックが行われていないと、一般ユーザーがその機能を呼び出せるおそれがあります。

想定される影響

  • 攻撃者がアカウントの削除、無効化、権限変更などの管理操作を行う可能性があります。
  • 内部の管理APIが外部リクエストに公開されている場合、多数のアカウントの侵害やサービス障害につながるおそれがあります。

対処方法

削除、無効化、権限変更などの重要なアクションに Authorize を適用し、サーバー側でロールまたはポリシーに基づく権限を確認してください。

例

変更前

csharp
[HttpDelete("delete-user")]
public IActionResult DeleteUser([FromQuery] int id)
{
    return Ok();
}

変更後

csharp
[Authorize(Roles = "Admin")]
[HttpDelete("delete-user")]
public IActionResult DeleteUser([FromQuery] int id)
{
    return Ok();
}

解説:

  • 変更前: アクション、コントローラー、グローバルポリシーのいずれでも権限チェックが行われない場合、権限のない呼び出し元にアカウント管理操作が公開されるおそれがあります。
  • 変更後: ユーザーやアカウントに対する破壊的な管理操作には Authorize を要求し、実行前に必要なロールやポリシーを満たすか確認してください。

参考資料