Hackvens
<-- home

advisories / CVE-2024-34477 - Fogproject

June 7, 2024
Composant vulnérable CVE ID Sévérité de la vulnérabilité Auteur
fogproject CVE-2024-34477 Majeur Christophe Hugueny

https://www.cve.org/CVERecord?id=CVE-2024-34477

Contexte

Lors d’une prestation de test d’intrusion interne, nous avons été confrontés au composant fogproject( https://fogproject.org/). Il s’agit d’une solution open source permettant de centraliser et de simplifier le déploiement d’images Windows, Linux et Mac par le biais d’un serveur PXE (serveur sur lequel des postes de travail peuvent venir récupérer des images de système d’exploitation au démarrage). Les différentes instances présentes chez ce client étaient en version 1.5.9, ce qui nous a permis de facilement exploiter la CVE-2021-32243 (RCE authentifiée grâce à un upload de fichier). Une fois l’exécution de commande sous l’utilisateur www-data obtenue, nous essayons d’élever nos privilèges sur la machine.

Vulnérabilité

Grâce à l’outil linpeas-ng, nous listons les différents éléments qui pourraient nous permettre d’élever nos privilèges. Un point attire immédiatement notre attention :

NFS est un protocole libre de partage de fichiers, similaire au protocole SMB de Microsoft. Nous constatons que deux partages NFS sont montés avec les attributs no_root_squash. Par défaut, NFS monte le partages avec l’attribut root_squash, ce qui signifie que les fichiers déposés sur celui-ci en tant que rootseront modifiés pour appartenir à l’utilisateur nobody (id:65534).

Dans le cas présent, les partages sont automatiquement montés par la solution fogproject avec no_root_squash. Nous retrouvons le code dédié aux partages NFS sur le github du projet :

Afin d’exploiter cette vulnérabilité, nous commençons par vérifier si les partages sont exposés sur le réseau à l’aide de la commande suivante :

$ showmount -e

Export list for fogproject-cve:
/images/dev   *
/images       *

Les partages semblent accessibles. Nous essayons donc d’accéder à ceux-ci dans le but de déposer le binaire /bin/bash depuis l’utilisateur root de notre machine d’attaquant. Grâce à l’attribut no_root_squash, le propriétaire (root) du fichier sera inchangé. Une fois l’ajout du bit SUID sur le binaire, nous pourrons l’exécuter en tant que root sur le serveur exécutant la solution fogproject pour obtenir un exécution de commande avec les pleins privilèges.

Une fois le binaire déposé et le bit SUID ajouté, nous exécutons le binaire dans le contexte de l’utilisateur root. Nous avons désormais les pleins privilèges sur le serveur, il est par exemple possible de lire le fichier /etc/shadow contenant les empreintes de mot de passe des utilisateurs :

Il est également possible d’exploiter cette vulnérabilité en local, lorsque le partage NFS n’est pas accessible sur le réseau. Cet article explique parfaitement la marche à suivre : https://www.errno.fr/nfs_privesc.html

Correction

En attendant la prochaine mise à jour et donc le déploiement du correctif, les créateurs du projet ont publié un article au sujet de la vulnérabilité pour proposer une solution temporaire à appliquer soi-même sur ses instances fogproject : https://forums.fogproject.org/topic/17486/fog-1-5-10-and-earlier-nfs-privilege-escalation-vulnerability Afin de corriger la vulnérabilité, la solution identifiée a été de modifier l’attribut no_root_squash par all_squash. Les attributs anonuid et anongidont également été ajoutés afin de définir l’utilisateur par défaut fogproject comme propriétaire des différents fichiers déposés.

Chronologie

Date Description
20/03/2024 Découverte de la vulnérabilité et première tentative de contact avec l’équipe de fogproject
05/04/2024 CVE-2024-34477 attribuée
16/05/2024 Deuxième tentative de contact avec l’équipe de fogproject
17/05/2024 Réponse de l’équipe de fogproject suite à l’ouverture d’un avis de sécurité sur Github
20/05/2024 Vérification du correctif proposé par l’équipe de fogproject
29/05/2024 Publication de la CVE-2024-34477