未認証のアクセスは、パブリッシュインスタンス URLを介してトラストストアと内部メタデータを公開します

Adobe Experience Manager(AEM)のパブリッシュインスタンスでDispatcher フィルターを実行すると、未認証のリクエストは、トラストストア関連のリソース、内部メタデータ、その他の非公開パスを公開する可能性があります。 この問題を解決するには、Dispatcher フィルタールールを確認して厳しくし、機密エンドポイントへのアクセスを明示的に拒否し、作成されたリクエストがパブリッシュ層に到達する前にブロックされていることを検証します。

説明 description

環境

パブリッシュインスタンスの前でDispatcherを使用するAdobe Experience Manager(AEM)デプロイメント

問題/症状

Dispatcher フィルタールールが許可されすぎたり、機密性の高いパスが明示的に制限されていない場合、AEM パブリッシュインスタンスで次の現象が発生します。

  • 特定のパブリッシュインスタンス URLには、認証、Cookie、特別なヘッダーを必要とせずに、未認証のGET要求を通じてアクセスできます。
  • リクエストが成功すると、トラストストア関連のリソース、内部ノード名、コンテンツ構造、設定関連のパス、アセットメタデータを公開できます。
  • 一部の細工されたリクエストでは、通常は制限されることが期待される内部ログイン関連のパスへのアクセスも許可されます。

URLの例:

  • https://www.example.com/etc/truststore.-1.json;x='.ico/x'- トラストストア関連の情報を公開する可能性があります
  • https://www.example.com/etc/truststore/truststore.p12;x='.ico/x'- トラストストア証明書ファイルのダウンロードを許可する可能性があります
  • https://www.example.com/.children.-1.json;x='.ico/x' – 内部ノード名、コンテンツ構造、設定関連のパス、メタデータを公開する可能性があります
  • https://www.example.com/libs/dam/merge/metadata.css;x='.ico/x'?path=/content/dam/example-site/example-logo-32x32.ico- MergeMetadataServletを通じてアセットメタデータを公開する可能性があります
  • https://www.example.com/libs/granite/core/content/login.html;x='.ico/x' – 通常は制限されることが期待される内部ログイン関連パスへのアクセスを許可する場合があります

エラー/ログ出力

明示的なエラーメッセージはありません。この問題は、内部リソースの意図しない露出です。

原因

この問題は通常、Dispatcher フィルタールールが、クラフトされたリクエストをブロックしたり、パブリッシュインスタンス上の機密性の高い内部パスへのアクセスを妨げたりするのに十分な制限がないことが原因で発生します。

解決策 resolution

: Dispatcher フィルタリングは重要ですが、それ自体は信頼性の高いセキュリティ バウンダリではありません。 AEM リポジトリーのACLとパブリッシュに対するエンドポイントの制限は、Dispatcher/Apache/CDN ルールを詳細な防御として引き続きプライマリコントロールにする必要があります。

問題を解決するには、次の手順に従います。

  1. Dispatcher フィルター設定の確認

    • dispatcher.anyなどのDispatcher設定ファイルを開きます。
    • /filterまたは/filters セクションを探します。
  2. セミコロンやその他の不審なURL パターンを含むリクエストがアプリケーションで必要とされない場合に、そのリクエストを拒否するルールを追加します。

    code language-none
    /0xxx { /type "deny" /url "*;*" }
    

    このルールは、URLにセミコロンを含むリクエストをブロックします。これは、フィルタリングを回避するために作成されたリクエストで一般的に使用されます。

  3. 機密パスへのアクセスを制限

    • /etc/truststore/libs/dam/merge/libs/granite/core/content/login.htmlなどの機密性の高いパスに対して、明示的な拒否ルールを追加します。

    • 例:

      code language-none
      /0xxx { /type "deny" /url "/etc/truststore*" }
                              /0xxx { /type "deny" /url "/libs/dam/merge*" }
                              /0xxx { /type "deny" /url "/libs/granite/core/content/login.html*" }
      
  4. 更新された設定を検証する

    • 更新されたDispatcher設定をすべてのパブリッシュインスタンスにデプロイします。
    • 以前に公開したURLを再テストし、404などのブロックされた応答、または設定に基づいて想定される別の拒否の応答を返すようになりました。
  5. パブリッシュ層の強化のレビュー

    • 機密性の高いリソースにパブリッシュ時に匿名でアクセスできないことを確認します。
    • 内部エンドポイントに対するAEMの権限とサーブレットの公開を確認します。
    • 既知の必要なパスのみが公開されるように、可能な限り許可リストベースのDispatcher モデルを優先します。

関連トピックス

recommendation-more-help
experience-cloud-kcs-help-kbarticles