コンテンツにスキップ

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