認可の欠如

認可の欠如

説明

リソースへのアクセスや操作の実行時に、そのユーザーに必要な権限があるかを確認しない問題です。

想定される影響

  • データへのアクセス: 保護が不十分なデータ保存先や機能を通じて、攻撃者がデータを取得・変更する可能性があります。
  • 権限昇格や制御の回避: 権限を要する機能や重要なデータへのアクセスによって、意図した制限が回避されるおそれがあります。
  • サービス拒否: 権限のないリソース利用で容量が消費され、サービスが中断する可能性があります。

対処方法

  1. すべてのユーザーリクエストで必要な権限を確認してください。
  2. 保護するエンドポイントやリソースごとに、要求者のロール、所有権など必要な条件を確認してください。
  3. Spring Securityなどのフレームワークで認証と認可を管理してください。

例

変更前

コントローラーメソッドの抜粋です。変更前では、URLやサービス層にも別の認可確認がないと仮定します。@PreAuthorizeを適用するには、Spring管理のBeanでメソッドセキュリティを有効にする必要があります。現在の構成では@EnableMethodSecurityを使用し、認証とロールの対応付けも別途設定してください。

java
@GetMapping("/admin")
public String getAdminPage() {
    // 機密データまたは管理者専用機能
    return "admin-page";
}

変更後

java
@GetMapping("/admin")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String getAdminPage() {
    // 機密データまたは管理者専用機能
    return "admin-page";
}

説明:

  • 変更前: /adminへのアクセス確認がありません。他の層でも制限していなければ、権限のないユーザーがアクセスできるおそれがあります。
  • 変更後: 前述のメソッドセキュリティ設定により、@PreAuthorize("hasRole('ROLE_ADMIN')")で管理者ロールを確認してから/adminを呼び出します。

関連CVE

参考資料