
CENG 325 - Principes de sécurité de l'information et de la vie privée
Membres du groupe
@canumay @aslihann @ezgigucuyener @mburakdonmez
Références
Exploit DB - Apache Tika-server < 1.18 - Command Injection
Rhino Security Labs - Exploiting CVE-2018-1335: Command Injection in Apache Tika
Avertissement
Le code d’exploitation est écrit par le chercheur en cybersécurité David Yesland @Daveysec et doit être utilisé à des fins éducatives.
a. Une brève description de la vulnérabilité
b. La manière d’exploiter la vulnérabilité
Quels types d’attaques peuvent être menées après avoir déclenché la vulnérabilité : Après avoir déclenché la vulnérabilité, nous pouvons facilement créer un reverse shell, et avec ce shell, nous pouvons essentiellement exécuter toutes les commandes disponibles pour l’utilisateur qui exécute le serveur Apache Tika.
Comment un attaquant exploite-t-il les systèmes vulnérables à l’aide de cette vulnérabilité : Tout d’abord, l’attaquant doit déterminer si le serveur exécute une version vulnérable du serveur Apache Tika. Ensuite, il génère un en-tête HTTP malveillant et le code Jscript avant d’envoyer une requête PUT au point de terminaison HTTP vulnérable, ce qui amène le serveur Apache Tika à exécuter le code malveillant en utilisant ses propres fonctionnalités.
La vulnérabilité est-elle utilisée dans des kits d’exploitation : Oui, cette vulnérabilité est disponible dans le kit d’exploitation Metasploit.
a. Trouvez ou créez un code d’exploitation qui exploite la vulnérabilité

b. Mettez en évidence les parties de code vulnérables et expliquez pourquoi elles sont vulnérables

Le serveur Apache Tika construit une commande à exécuter avec les valeurs fournies par l’utilisateur dans la requête pour exécuter l’OCR sur les images. Cela permet aux utilisateurs de manipuler la commande et d’exécuter du code malveillant. Dans ce cas, « config.getTesseractPath() » récupère l’en-tête « X-Tika-OCRTesseractPath » et l’ajoute au début de la commande. Bien que la chaîne « tesseract.exe » soit ajoutée à la fin du chemin fourni par l’utilisateur, celui-ci peut entourer son chemin avec des guillemets doubles pour ignorer la chaîne « tesseract.exe » qui suit. Cela permet à l’utilisateur d’exécuter n’importe quel exécutable sur le serveur.
La commande élaborée :
"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
Le CScript.exe intégré à Windows est un langage de script qui prend un nom de fichier de script, l’exécute et ignore les autres arguments. Si nous pouvons fournir un script conçu pour cscript, nous pouvons l’exécuter sur le serveur. Le serveur Apache Tika prend l’image fournie dans le corps de la requête et l’enregistre dans un fichier temporaire pour exécuter l’OCR. Ainsi, au lieu d’envoyer un binaire d’image, nous pouvons directement envoyer une chaîne qui sera enregistrée comme s’il s’agissait d’un binaire. Mais le serveur Tika vérifie si le binaire est une image, à l’exception du type de fichier jp2, auquel cas il est enregistré directement. Ce fichier sera ensuite passé comme argument à l’exécutable cscript. Toutefois, l’extension du fichier sera toujours « .tmp », alors qu’il nous faut un « . JScript » ou « .vbs ». Pour contourner cela, nous pouvons demander à cscript d’exécuter « JScript » quel que soit le type d’extension. Le serveur Tika passe également « config.getPageSetMode() » à la commande, une valeur envoyée par l’utilisateur dans l’en-tête « X-TikaOCRLanguage ». Si nous la remplaçons par la chaîne « //E:Jscript », cscript exécutera le script en tant que JScript, quel que soit le type d’extension. Enfin, la chaîne fournie dans le corps sera le payload à exécuter, qui peut également appeler une autre console pour avoir un accès complet au shell du système.
La commande finale élaborée :
"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 simple payload pour appeler le shell en Jscript :
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. Exécutez le code d’exploitation que vous avez trouvé ou créé :

Le serveur Apache Tika 1.17 s’exécute dans la machine virtuelle cible.

Nous pouvons accéder au serveur depuis notre machine hôte avec l’adresse IP « 192.168.233.167 ».

Ensuite, nous avons exécuté le code d’exploitation élaboré avec le payload « calc.exe » pour lancer la calculatrice dans la machine cible, afin de montrer que nous avons la capacité d’exécuter tout code malveillant dans la machine cible. De plus, grâce au reverse shell, nous pouvons créer une session shell interactive sur la machine cible.

b. Quels sont les résultats de l’exécution du code d’exploitation :
Comme expliqué plus haut, avec cet exploit, nous exécutons essentiellement le programme calculatrice dans la machine cible, mais grâce à la capacité d’exécution de code à distance, nous pouvons faire ce que nous voulons sur la machine cible avec les privilèges de l’utilisateur qui exécute le serveur Apache Tika. Par exemple, nous pouvons accéder aux fichiers de l’utilisateur, surveiller son activité et même prendre une capture d’écran ou une photo avec la webcam si elle existe.
c. Comment pouvez-vous savoir que la vulnérabilité existe réellement :
Cette vulnérabilité a déjà été signalée par des sources fiables comme le NIST, et même confirmée et corrigée par Apache lui-même. Mais pour le prouver, nous pouvons réaliser une autre preuve de concept (PoC) en utilisant Metasploit.

Tout d’abord, nous avons confirmé que la version installée est une version vulnérable.

Après avoir confirmé la version, nous pouvons configurer notre session Metasploit avec la bonne adresse IP et le bon port, puis exécuter la commande « check » pour vérifier si la cible est vulnérable.

Enfin, nous pouvons exécuter la commande « exploit » pour lancer l’exploit et confirmer que le shell est actif en tapant « dir » dans le shell. À partir de là, la seule limitation est celle des privilèges de l’utilisateur qui exécute le serveur Apache Tika.