Insecure Authorization Restriction
安全でない認可の制限
説明
安全でない認可の制限とは、HTTPリクエスト操作の技術を通じて悪用される可能性がある、サーバー側の制限における弱点を指します。この脆弱性により、攻撃者はアクセス制御を回避することができ、リソースへの不正アクセスや権限昇格が発生し、権限のないユーザーが機密データを取得、作成、更新、または削除できるようになります。
たとえば、Webサーバー上で安全でない認可の制限を標的とする場合、次のような手法が含まれます。
- HTTPリクエストメソッドのファジング: サーバー上で無効な、不正な形式の、または予期しないHTTPメソッドをテストします。
- HTTPリクエストパスのファジング: HTTPリクエストパスを変形させたり、追加または削除したりして操作します。
- HTTPリクエストクエリパラメータのファジング: 元のクエリパラメータを追加、削除、または変更します。
- HTTPリクエストヘッダーのファジング: 既知のヘッダーを追加したり、ヘッダーを削除したり、プロキシヘッダーを追加したりします。
これらの手法はすべて、サーバーのロジックの欠陥、脆弱性、またはミスを標的としています。
import requests
response = requests.get("http://www.some-url.com/unauthorized_path")
'''if we have some unauthorized path that gets us a 403 code,
we can try something like adding a query parameter like "debug=true" to see if we can
trick the server by exploiting some mistake.'''
response = requests.get("http://www.some-url.com/unauthorized_path?debug=true")
'''Might get us the resource we want''
推奨事項
組織は、安全でない認可の制限によるHTTP脆弱性のリスクを軽減するために、適切なアクセス制御を実装し、HTTPリクエストの厳格な検証を実施する必要があります。これには、受信したHTTPメソッド、ヘッダー、クエリパラメータ、およびパスに関するルールを管理するための堅牢なサーバー側ロジックが必要です。
以下にいくつかの推奨事項を示します。
- HTTPメソッドの制限: 各ビュー/リソースにアクセスできるHTTPメソッドを制限します。
- クエリパラメータのサニタイズ: 各リクエストのクエリパラメータをサニタイズし、限られたパラメータのセットのみがサーバーのロジックに影響を与えることができるようにします。
- ヘッダーの制限: コードに影響を与えることができるヘッダーを制限します。サーバー側で変更を加えることができるヘッダー/メソッドの組み合わせについて厳格なルールを使用し、インターネット上で簡単に見つけられるヘッダー値(GoogleのUser-Agentなど)にロジックが依存しないようにします。
- 堅牢なパスの解析: 厳格なルールを持つ堅牢なパス解析を実装し、標準に準拠していないリクエストを拒否します。
python
# このルートではGETおよびPOSTメソッドのみを許可する
@app.route('/limiting_method_usage', methods=['GET', 'POST'])
def limiting_method_usage():
if request.method == 'GET':
return jsonify({"message": "This is a GET request"})
elif request.method == 'POST':
data = request.json
return jsonify({"message": "This is a POST request", "data": data})
# 期待するヘッダーのみを使用する
@app.route('/limiting_header_values')
def limiting_header_values():
expected_header = request.headers.get('Expected-Header')
### 期待されるヘッダーに依存するロジック
リンク
標準
- OWASP_ASVS_L1:
- V4_1_1
- V4_1_2
- V4_1_3
- V4_1_5
- V5_1_1
- V5_1_2
- V5_1_3
- V5_1_4
- V5_2_2
- OWASP_ASVS_L2:
- V4_1_1
- V4_1_2
- V4_1_3
- V4_1_5
- V5_1_1
- V5_1_2
- V5_1_3
- V5_1_4
- V5_2_2
- OWASP_ASVS_L3:
- V4_1_1
- V4_1_2
- V4_1_3
- V4_1_5
- V5_1_1
- V5_1_2
- V5_1_3
- V5_1_4
- V5_2_2
- PCI_STANDARDS:
- REQ_2_2
- HIPAA_CONTROLS:
- SECURITY221
- SECURITY212
- SECURITY213