advisories / CVE-2024-34477 - Fogproject
June 7, 2024Composant 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 root
seront 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 anongid
ont é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 |