
CENG 325 - Principios de Seguridad y Privacidad de la Información
Miembros del Grupo
@canumay @aslihann @ezgigucuyener @mburakdonmez
Referencias
Exploit DB - Apache Tika-server < 1.18 - Inyección de Comandos
Rhino Security Labs - Explotación de CVE-2018-1335: Inyección de Comandos en Apache Tika
Descargo de responsabilidad
El código del exploit fue escrito por el investigador de ciberseguridad David Yesland @Daveysec y debe utilizarse únicamente con fines educativos.
a. Una breve descripción de la vulnerabilidad
a. Encuentra o crea un código de exploit que explote la vulnerabilidad
b. Resalta las piezas de código vulnerables y explica por qué son vulnerables
El servidor Apache Tika construye un comando para ejecutar, con los valores proporcionados por el usuario en la solicitud, para ejecutar OCR en imágenes. Esto permite a los usuarios manipular el comando y ejecutar código malicioso. En este caso, “config.getTesseractPath()” obtiene la cabecera “X-Tika-OCRTesseractPath” y la añade al principio del comando. Aunque la cadena “tesseract.exe” se añade al final de la ruta proporcionada por el usuario, este puede envolver su ruta con ‘ “ ’ (comillas dobles) para descartar la cadena “tesseract.exe” que sigue. Esto permite al usuario ejecutar cualquier ejecutable en el servidor.
El comando construido:
"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
El CScript.exe integrado en Windows es un lenguaje de scripting que toma un nombre de archivo para un script y lo ejecuta, ignorando los demás argumentos. Si podemos proporcionar un script preparado para cscript, podemos ejecutarlo en el servidor. El servidor Apache Tika toma nuestra imagen proporcionada en el cuerpo y la guarda en un archivo temporal para ejecutar el OCR, por lo que, en lugar de enviar un binario de imagen, podemos enviar directamente una cadena y la cadena se guardará como si fuera un binario. Pero el servidor Tika comprueba si el binario es una imagen excepto para el tipo de archivo jp2, en cuyo caso se guarda directamente. Que se pasará como argumento al ejecutable cscript. Pero la extensión del archivo seguirá siendo “.tmp”, aunque necesitamos una “. JScript” o “.vbs”. Para superar esto, podemos indicar a cscript que ejecute “JScript” sin importar la extensión del archivo. El servidor Tika también pasa el “config.getPageSetMode()” al comando, que es enviado por el usuario en la cabecera “X-TikaOCRLanguage”. Si lo cambiamos por la cadena “//E:Jscript”, cscript ejecutará el script como JScript sin importar la extensión del archivo. Y finalmente, la cadena proporcionada en el cuerpo será el payload a ejecutar, que también puede invocar otra consola para tener acceso completo al shell del sistema.
El comando final construido:
"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 payload simple para llamar a la shell en Jscript:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. Ejecuta el código de exploit que encuentres o crees:
Apache Tika Server 1.17 se está ejecutando dentro de la máquina virtual objetivo.
Podemos acceder al servidor desde nuestra máquina anfitriona con la IP “192.168.233.167”.
Luego ejecutamos el código de exploit construido con el payload “calc.exe” para ejecutar la calculadora dentro de la máquina objetivo, para demostrar que tenemos la capacidad de ejecutar cualquier código malicioso dentro de la máquina objetivo. Además, con el poder de la reverse shell, podemos crear una sesión de shell interactiva en la máquina objetivo.
b. ¿Cuáles son los resultados de la ejecución del código de exploit?
Como explicamos anteriormente, con este exploit básicamente ejecutamos el programa de la calculadora dentro de la máquina objetivo, pero con la capacidad de ejecución remota de código podemos hacer lo que queramos en la máquina objetivo con los privilegios del usuario que ejecuta el servidor Apache Tika. Por ejemplo, podemos acceder a los archivos del usuario, monitorear su actividad e incluso tomar una captura de pantalla o una foto con la cámara web si existe.
c. ¿Cómo puedes saber que la vulnerabilidad realmente existe?
Esta vulnerabilidad ya ha sido reportada por fuentes confiables como NIST, e incluso confirmada y parcheada por Apache. Pero para demostrarlo, podemos hacer otra PoC usando metasploit.
Primero, confirmamos que la versión instalada es una versión vulnerable.
Después de confirmar la versión, podemos configurar nuestra sesión de metasploit con la IP y el puerto correctos y ejecutar el comando “check” para verificar si el objetivo es vulnerable.
Finalmente, podemos ejecutar el comando “exploit” para iniciar el exploit y confirmar que la shell está activa escribiendo “dir” en la shell. A partir de aquí, la única limitación son los privilegios del usuario que ejecuta el servidor Apache Tika.