説明
リソースへのアクセスや操作の実行時に権限を確認していても、その確認が意図したポリシーを正しく適用していない場合に生じる問題です。
想定される影響
影響は、適切に保護されていないリソースや機能によって異なります。
- アプリケーションデータへのアクセス: 制限が不十分な保存先からデータを読み取られる可能性があります。
- ファイルシステムへのアクセス: ファイルやディレクトリを不正に読み取られたり、変更されたりする可能性があります。
- 権限昇格: 誤った権限チェックにより、高い権限を与えてしまう可能性があります。
- 不正な実行: 権限を悪用して、許可されていないコマンドやコードを実行されるおそれがあります。
- サービス拒否: システムリソースの悪用により、サービスが妨害される可能性があります。
対処方法
- アクセス制御が必要なすべてのリソースと機能で、正しく権限を確認します。
- Spring Securityなどの認証・認可フレームワークを利用し、重要なリソースの保護を実装しやすくします。
- コードレビューとテストで権限チェックの抜けを見つけ、修正します。
以下の例は、@EnableMethodSecurityなどでメソッドセキュリティを有効にし、Springが管理するBeanのセキュリティプロキシを経由して呼び出す構成を前提としています。
例
変更前
java
@RestController
public class AdminController {
@GetMapping("/admin/data")
public String getAdminData() {
// データに対する適切な権限チェックがありません
return "Sensitive admin data";
}
}
変更後
java
@RestController
public class AdminController {
@GetMapping("/admin/data")
@PreAuthorize("hasRole('ADMIN')")
public String getAdminData() {
// ADMINロールを持つユーザーだけがアクセスできます
return "Sensitive admin data";
}
}
説明:
- 変更前: このメソッドには権限チェックがありません。他のアクセス制御もなければ、管理用のデータが漏えいする可能性があります。
- 変更後:
@PreAuthorizeにより、/admin/dataのメソッドへのアクセスをADMINロールに制限しています。
関連するCVE
- CVE-2021-39155: HTTP Hostを大文字と小文字を区別して比較する処理(CWE-178、CWE-1289)により、表記の違うホスト名で認可ポリシーを回避できる問題(CWE-863)
- CVE-2019-15900: sscanf()の戻り値を確認しない(CWE-252)ため未初期化の値が使われ(CWE-457)、特権操作の認可を回避できる問題(CWE-863)
- CVE-2009-2213: ゲートウェイの認可設定が既定でAllowになっている問題