인증되지 않은 액세스는 게시 인스턴스 URL을 통해 Truststore 및 내부 메타데이터를 노출합니다
Adobe Experience Manager(AEM) 게시 인스턴스에 대한 Dispatcher 필터가 너무 허용되면 인증되지 않은 요청이 Truststore 관련 리소스, 내부 메타데이터 및 기타 비공개 경로를 노출할 수 있습니다. 이 문제를 해결하려면 Dispatcher 필터 규칙을 검토하고 강화하고, 중요한 끝점에 대한 액세스를 명시적으로 거부하고, 만들어진 요청이 게시 계층에 도달하기 전에 차단되는지 확인하십시오.
설명 description
환경
게시 인스턴스 앞에 Dispatcher을 사용하는 Adobe Experience Manager(AEM) 배포
문제/증상
Dispatcher 필터 규칙이 너무 허용되거나 민감한 경로가 명시적으로 제한되지 않는 경우 AEM 게시 인스턴스에서 다음 증상이 관찰됩니다.
- 인증, 쿠키 또는 특수 헤더를 요구하지 않고 인증되지 않은
GET요청을 통해 특정 게시 인스턴스 URL에 액세스할 수 있습니다. - 요청이 성공하면 Truststore 관련 리소스, 내부 노드 이름, 콘텐츠 구조, 구성 관련 경로 및 자산 메타데이터가 노출될 수 있습니다.
- 일부 제작된 요청은 일반적으로 제한될 것으로 예상되는 내부 로그인 관련 경로에 대한 액세스도 허용합니다.
예제 URL:
https://www.example.com/etc/truststore.-1.json;x='.ico/x'- Truststore 관련 정보를 노출할 수 있습니다.https://www.example.com/etc/truststore/truststore.p12;x='.ico/x'- Truststore 인증서 파일의 다운로드를 허용할 수 있음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.any과(와) 같은 Dispatcher 구성 파일을 엽니다./filter또는/filters섹션을 찾습니다.
-
애플리케이션에서 필요하지 않은 세미콜론이나 기타 의심스러운 URL 패턴이 포함된 요청을 거부하는 규칙을 추가합니다.
code language-none /0xxx { /type "deny" /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 권한 및 서블릿 노출을 검토하십시오.
- 가능한 허용 목록에 추가하다 기반 Dispatcher 모델을 선호하므로 항상 알려지고 필요한 경로만 공개적으로 노출됩니다.