未经身份验证的访问通过发布实例URL公开truststore和内部元数据
如果Adobe Experience Manager (AEM)发布实例上的Dispatcher过滤器过于宽松,则未经身份验证的请求可能会公开与信任库相关的资源、内部元数据和其他非公共路径。 要解决此问题,请查看并加强Dispatcher筛选规则,明确拒绝对敏感端点的访问,并在精心编制的请求到达发布层之前验证它们是否被阻止。
描述 description
环境
在发布实例前使用Dispatcher的Adobe Experience Manager (AEM)部署
问题/症状
当AEM筛选规则过于宽松或未明确限制敏感路径时,在Dispatcher发布实例上会看到以下症状:
- 某些发布实例URL可通过未经身份验证的
GET请求访问,而无需身份验证、Cookie或特殊标头。 - 成功的请求可以公开与信任库相关的资源、内部节点名称、内容结构、与配置相关的路径以及资产元数据。
- 某些精心编制的请求还允许访问通常应受限制的内部登录相关路径。
示例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规则作为防御。
请按照以下步骤解决问题:
-
查看Dispatcher过滤器配置
- 打开Dispatcher配置文件,如
dispatcher.any。 - 找到
/filter或/filters部分。
- 打开Dispatcher配置文件,如
-
添加规则以拒绝包含分号或其他可疑URL模式的请求(如果应用程序不需要这些模式)。
code language-none /0xxx { /type "deny" /url "*;*" }此规则阻止在URL中包含分号的任何请求,URL通常用于精心编制的旨在绕过筛选的请求。
-
限制对敏感路径的访问
-
为敏感路径(如
/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*" }
-
-
验证更新的配置
- 将更新的Dispatcher配置部署到所有发布实例。
- 重新测试以前公开的URL,并确认它们现在返回阻止的响应,如
404或另一个基于您的设置的预期拒绝响应。
-
查看发布层强化
- 验证发布时是否无法匿名访问敏感资源。
- 查看AEM权限和内部端点的Servlet泄露。
- 尽可能首选基于允许列表的Dispatcher模型,以便公开仅已知的必要路径。
相关阅读
recommendation-more-help
experience-cloud-kcs-help-kbarticles