- OWASP TOP10 (最も一般的な10のアプリケーションの脆弱性のリスト)のA01:2021 – Broken Access Control についてメモする。
※かなり以前にまとめたもの
概要
-
アクセス制御の不備に関する脆弱性
-
該当するCWE
CWE No. 内容 CWE-200 不正なアクターへの機密情報の公開(情報漏洩) CWE-201 送信データによる機密情報の公開 CWE-352 クロスサイトリクエストフォージェリ(CSRF) ※CWE : Common Weakness Enumeration、ソフトウェアにおけるセキュリティ上の脆弱性の種類を識別するための共通の基準
-
アクセス制御の不備がもたらす影響
- データの不正な情報開示や変更、破壊、
- 制限外のビジネス機能の利用
-
一般的なアクセス制御に関する脆弱性
-
アクセス制御チェックのバイパス
- URLやアプリの内部状態、HTMLページの変更など
-
他ユーザーのアカウント情報の参照または編集
-
権限昇格
- 本来与えられないはずの権限がユーザーに与えられる
-
メタデータ操作
- JSON Web Token(JWT)のリプレイ攻撃や改竄
- Cookieまたは非表示フィールドの操作 など
-
不正なAPIアクセス
- CORS設定ミスによる
-
権限外情報の強制参照
- 未ログイン状態でログイン済みページへアクセス
- 標準ユーザーのログインから特権/管理者ページへアクセス
- アクセス制御が欠落しているAPIへのアクセス。
-
対策
-
攻撃者へのアクセス制御チェックもしくはメタデータを変更できないようサーバー側コードを記述
- パブリックリソースを除き、デフォルトではアクセス拒否
- アクセス制御機能を実装し、アプリケーション全体で利用
- ユーザーが任意のレコードを作成、読み取り、更新、または削除できることを受容せず、レコードの所有権を強制させる
- 固有のビジネス要件による制限は、ドメインモデルによって実施
- ファイルメタデータやバックアップファイルをWebルート内に配置させない
- ログイン操作の失敗回数などをログ記録し、必要に応じて管理者へアラートを通知
- 自動化された攻撃ツールに対してアクセスレート制限を実施
- JWTトークンをログアウト後にサーバーで無効化
-
開発担当とQA担当は、機能的なアクセス制御に関する統合テストを実施する。
攻撃シナリオ
シナリオ例①
- 未検証パラメータを使用したユーザー情報アクセス
pstmt.setString(1、request.getParameter( "acct"));
ResultSet results = pstmt.executeQuery();
- 攻撃者は、ブラウザの「acct」パラメータを変更し、必要なアカウント番号を送信する
- 正しく検証されていない場合、攻撃者は任意のユーザーのアカウントにアクセスできる
シナリオ例②
- 管理権限が要求されるようなページへのアクセス
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo
- 以下の場合は脆弱性に該当する。
- 未認証ユーザーがどちらかのページにもアクセスできる場合
- 管理者以外の人が管理者ページにアクセスできる場合