keyshot logo

Vladimir a eu l’occasion de tester la sécurité du logiciel KeyShot 11.1 lors d’une mission de test d’intrusion.

Ce logiciel, édité par Luxion, est utilisé pour réaliser des rendus 3D photoréalistes en temps réel. Il nécessite des capacités de calcul importantes qui peuvent être distribuées sur plusieurs serveurs grâce à KeyShot Network Rendering.

Dans le cas d’une architecture distribuée, un ou plusieurs managers doivent être configurés de manière à gérer les comptes des utilisateurs et distribuer les tâches aux différents workers. Les utilisateurs finaux du logiciel utilisent alors leur client local pour s’authentifier auprès du manager et lui envoyer les tâches à distribuer.

Le client lourd KeyShot Network Monitoring (« keyshot_network_monitor.exe ») permet aux utilisateurs de s’authentifier et d’accéder à l’état d’avancement des tâches et le taux d’occupation des workers.

Analyse du protocole réseau

Les clients communiquent avec le manager sur le port TCP/4827 en utilisant un protocole propriétaire. Les communications sont en clair par défaut mais du chiffrement TLS peut être configuré. Lors de l’audit en question, le chiffrement n’était pas activé.

L’auditeur DSecBypass a décidé d’analyser la surface d’attaque non-authentifiée exposée par le manager. Pour ce faire, il a utilisé KeyShot Network Monitoring avec un compte valide afin de conduire une rétro-ingénierie des communications entre le client et le manager.

Le logiciel Wireshark a été utilisé afin de capturer les différents paquets échangés. Le consultant a interagit avec le logiciel en prenant le soin d’utiliser les fonctionnalités les plus importantes de manière à générer un maximum de trafic et pouvoir identifier quelles séquences d’octet régissent les actions.

Afin d’isoler les paquets intéressants dans la conversation, il suffit de créer un filtre sur l’adresse IP du manager comme suit :

ip.addr == 192.168.1.1

Puis décoder flux TCP à partir des paquets filtrés:

Wireshark suivre flux TCP

Une fenêtre s’ouvre et affiche les caractères qui peuvent être affichés, colorés selon qu’ils sont émis ou reçus.

Cette fenêtre est pratique pour suivre le déroulé de la conversation entre le client et le manager. Quand un message intéressant est découvert, il suffit de cliquer dessus afin de mettre en surbrillance le paquet correspondant dans la fenêtre de capture Wireshark.

 

Wireshark cliquer dans la fenêtre pour sélectionner paquet

La capture d’écran ci-dessus montre le paquet sélectionné en cliquant sur la suite de lettres « pass ».

Afin d’extraire le message tel quel, il suffit d’exporter les données TCP (data ou payload TCP) :

L’auditeur a ainsi pu exporter les messages correspondants à l’authentification, la récupération des informations sur les tâches en cours, le changement des informations d’un utilisateur et autres actions intéressantes.

Une partie importante de l’analyse a été de comprendre comment étaient formés les paquets et dans quel ordre ils étaient envoyés au manager. Il est aussi important d’analyser les réponses du manager, de la même manière, afin de savoir si le message précédent a été rejeté ou non.

La manipulation des paquets

Une fois les différents messages isolés, il peut être intéressant de les rejouer et les modifier.

L’auditeur s’est appuyé sur la librairie Python pwntools : orientée CTF, elle est optimisée pour les challenges types pwn/reverse et permet en quelques lignes d’interagir avec des sockets TCP.

Quelques commandes bash sont aussi bien utiles :

#Inspecter les octets des messages

xxd fichier.bin

#Comparer les octets de deux fichiers et afficher les offsets

cmp -l fichier1.bin fichier2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'

#Remplacer une suite d’octets par une autre dans un fichier (utile pour modifier une chaîne de caractères par exemple)

xxd -p -c 123456789 fichier.bin |sed 's/0011002200330044/0011003300220044/g' | xxd -p -r > fichier2.bin

Identifier les octets spécifiants la taille du message et des différents champs est laissé en exercice aux lecteurs.

Le squelette de script Python suivant peut être utilisé pour facilement envoyer les messages ainsi préparés au manager :

La vulnérabilité

En utilisant les méthodologies décrites dans les paragraphes précédents, l’auditeur a réussi a trouver un défaut de sécurité dans le protocole en une journée d’analyse. Le POC final ne sera pas divulgué.

La vulnérabilité, découverte par Vladimir, permet à un attaquant non authentifié ayant accès au port 4827 du manager de contourner l’authentification afin d’obtenir la liste des utilisateurs créés, puis de la même manière demander les informations les concernant (date de dernière mise à jour, adresse mail et rôle).

Cette fuite d’information pourrait permettre à un attaquant de tenter une attaque par bruteforce sur les comptes découverts ou par ingénierie sociale en utilisant les adresses mail.

N’ayant pas un impact directe sur la sécurité de l’infrastructure distribuée (actions non-privilégiées et non-admin), cette vulnérabilité présente un risque qualifié d’important avec un score CVSS de 5.3.

Communication avec l’éditeur

La communication avec l’éditeur Luxion s’est remarquablement bien déroulée : le procédé de divulgation des vulnérabilités est bien documenté sur https://www.keyshot.com/csirt/,  l’équipe sécurité a répondu dans la journée, et la vulnérabilité a été validée et corrigée dans les jours suivants.

La version KeyShot 11.2 corrige cette vulnérabilité.

Luxion a documenté cette nouvelle vulnérabilité dans leur LSA-989246 et a crédité Vladimir TOUTAIN de DSecBypass pour la découverte de cette vulnérabilité dans le logiciel KeyShot.

21/06/2022 :  Mail de contact envoyé à [email protected]

21/06/2022 : Réponse de Luxion et envoi des détails par Vladimir

27/06/2022 : Mail de Luxion indicant que la vulnérabilité a été validée et fixée depuis le 21/06, envoi d’une version beta avec le correctif

27/06/2022 : Luxion envoie une première version de l’advisory LSA-989246 pour validation, accord sur un délai d’une semaine après la publication de la version 11.2 pour communiquer côté DSecBypass

29/06/2022 : Publication de la version 11.2 avec le correctif de la vulnérabilité

06/07/2022 : Validation de cet article de blog par Luxion

🛡️ DSecBypass vous accompagne sur l’audit de sécurité de vos applications. N’hésitez pas à nous contacter pour des informations complémentaires et/ou un devis personnalisé 📝.