説明
リソースへのアクセスや操作の実行時に、そのユーザーに必要な権限があるかを確認しない問題です。
想定される影響
- データへのアクセス: 保護が不十分なデータ保存先や機能を通じて、攻撃者がデータを取得・変更する可能性があります。
- 権限昇格や制御の回避: 権限を要する機能や重要なデータへのアクセスによって、意図した制限が回避されるおそれがあります。
- サービス拒否: 権限のないリソース利用で容量が消費され、サービスが中断する可能性があります。
対処方法
- すべてのユーザーリクエストで必要な権限を確認してください。
- 保護するエンドポイントやリソースごとに、要求者のロール、所有権など必要な条件を確認してください。
- 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
- CVE-2022-24730:アプリの作成・更新時の権限確認不足によるリポジトリ情報の公開
- CVE-2009-3168:管理スクリプトへのアクセス制限不足による管理者パスワードのリセット
- CVE-2009-3597:Webルート内のデータベースファイルへの直接アクセス