
CENG 325 - Principi di Sicurezza delle Informazioni e Privacy
Membri del Gruppo
@canumay @aslihann @ezgigucuyener @mburakdonmez
Riferimenti
Exploit DB - Apache Tika-server < 1.18 - Iniezione di comandi
Rhino Security Labs - Sfruttamento di CVE-2018-1335: Iniezione di comandi in Apache Tika
Avvertenza
Il codice exploit è scritto dal ricercatore di cybersicurezza David Yesland @Daveysec e dovrebbe essere utilizzato per scopi educativi.
a. Una breve descrizione della vulnerabilità
b. Il modo di sfruttare la vulnerabilità
Quali tipi di attacchi possono essere implementati dopo aver innescato la vulnerabilità: Dopo aver innescato la vulnerabilità possiamo facilmente creare una reverse shell, e con quella shell possiamo praticamente eseguire tutti i comandi disponibili per l'utente che esegue il server Apache Tika.
Come fa un attaccante a sfruttare sistemi vulnerabili usando la vulnerabilità: In primo luogo, l'attaccante deve determinare se il server esegue una versione vulnerabile del server Apache Tika. Successivamente, genera un'intestazione HTTP malevola e il codice Jscript prima di inviare una richiesta PUT all'endpoint HTTP vulnerabile, il che fa sì che il server Apache Tika esegua il codice malevolo usando la propria funzionalità.
La vulnerabilità è usata negli exploit kit: Sì, questa vulnerabilità è disponibile nell'exploit kit Metasploit.
a. Trova o crea un codice exploit che sfrutti la vulnerabilità
b. Evidenzia le parti di codice vulnerabili e spiega perché sono vulnerabili
Il server Apache Tika costruisce un comando da eseguire, con i valori forniti dall'utente nella richiesta per eseguire l'OCR sulle immagini. Ciò consente agli utenti di manipolare il comando ed eseguire codice malevolo. In questo caso, “config.getTesseractPath()” recupera l'intestazione “X-Tika-OCRTesseractPath” e la aggiunge all'inizio del comando. Sebbene la stringa “tesseract.exe” venga aggiunta alla fine del percorso fornito dall'utente, l'utente può racchiudere il percorso con ‘ “ ’ (virgolette doppie) per scartare la stringa “tesseract.exe” successiva. Questo consente all'utente di eseguire qualsiasi eseguibile sul server.
Il comando costruito:
"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0
Il CScript.exe integrato in Windows è un linguaggio di scripting che accetta un nome di file per uno script e lo esegue ignorando gli altri argomenti. Se possiamo fornire uno script creato per cscript, possiamo eseguirlo sul server. Il server Apache Tika prende la nostra immagine fornita nel corpo e la salva in un file temporaneo per eseguire l'OCR, quindi invece di inviare un binario immagine possiamo inviare direttamente una stringa e la stringa verrà salvata come se fosse un binario. Ma il server Tika controlla se il binario è un'immagine, ad eccezione del tipo di file jp2, nel qual caso viene salvato direttamente. Questo verrà passato come argomento all'eseguibile cscript. Ma l'estensione del file sarà ancora “.tmp”, mentre abbiamo bisogno di un “. JScript” o “.vbs”. In ordine per superare questo problema, possiamo dire a cscript di eseguire “JScript” indipendentemente dall'estensione del file. Il server Tika passa anche “config.getPageSetMode()” al comando, che viene inviato dall'utente in X-TikaOCRLanguage” header. Se la modifichiamo con la stringa “//E:Jscript”, cscript eseguirà lo script come JScript indipendentemente dall'estensione del file. Infine, la stringa fornita nel corpo sarà il payload da eseguire, che può anche chiamare un'altra console per avere accesso completo alla shell di sistema.
Il comando finale costruito:
"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0
Un semplice payload per chiamare la shell in Jscript:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. Esegui il codice exploit che hai trovato o creato:
Apache Tika Server 1.17 è in esecuzione all'interno della macchina virtuale di destinazione.
Possiamo accedere al server dalla nostra macchina host con l'IP “192.168.233.167”.
Quindi abbiamo eseguito il codice exploit costruito con il payload “calc.exe” per eseguire la calcolatrice nella macchina di destinazione, per dimostrare che siamo in grado di eseguire qualsiasi codice malevolo nella macchina di destinazione. Inoltre, con il potere della reverse shell, possiamo creare una sessione di shell interattiva sulla macchina di destinazione.
b. Quali sono i risultati dell'esecuzione del codice exploit:
Come spiegato sopra, con questo exploit eseguiamo fondamentalmente il programma calcolatrice all'interno della macchina di destinazione, ma con la capacità di esecuzione remota di codice possiamo fare ciò che vogliamo sulla macchina di destinazione con i privilegi dell'utente che esegue il server Apache Tika. Ad esempio, possiamo accedere ai file dell'utente, monitorare l'attività dell'utente e persino catturare uno screenshot o scattare una foto con la webcam, se presente.
c. Come puoi capire che la vulnerabilità esiste realmente:
Questa vulnerabilità è già stata segnalata da fonti affidabili come NIST, ed è stata confermata e corretta da Apache stesso. Ma per dimostrarlo, possiamo fare un'altra PoC usando Metasploit.
In primo luogo, abbiamo confermato che la versione installata è una versione vulnerabile.
Dopo aver confermato la versione, possiamo configurare la nostra sessione Metasploit con l'IP e la porta corretti ed eseguire il comando “check” per verificare se il bersaglio è vulnerabile.
Infine, possiamo eseguire il comando “exploit” per avviare l'exploit e confermare che la shell è attiva digitando “dir” nella shell. A questo punto, l'unica limitazione è rappresentata dai privilegi dell'utente che esegue il server Apache Tika.