NFS no_root_squash/no_all_squash misconfiguration PE
Lisez le fichier _ /etc/exports _, si vous trouvez un répertoire configuré comme no_root_squash, alors vous pouvez y accéder en tant que client et écrire à l'intérieur de ce répertoire comme si vous étiez le root local de la machine.
no_root_squash: Cette option donne essentiellement l'autorité à l'utilisateur root sur le client pour accéder aux fichiers sur le serveur NFS en tant que root. Et cela peut entraîner de graves implications en termes de sécurité.
no_all_squash: C'est similaire à l'option no_root_squash mais s'applique aux utilisateurs non root. Imaginez, vous avez un shell en tant qu'utilisateur nobody; vérifié le fichier /etc/exports; l'option no_all_squash est présente; vérifié le fichier /etc/passwd; émulez un utilisateur non root; créez un fichier suid en tant qu'utilisateur (en montant en utilisant nfs). Exécutez le suid en tant qu'utilisateur nobody et devenez un utilisateur différent.
Élévation de privilèges
Exploitation à distance
Si vous avez trouvé cette vulnérabilité, vous pouvez l'exploiter :
Monter ce répertoire sur une machine cliente, et copier en tant que root à l'intérieur du dossier monté le binaire /bin/bash et lui donner des droits SUID, puis exécuter à partir de la machine victime ce binaire bash.
Monter ce répertoire sur une machine cliente, et en tant que root copier à l'intérieur du dossier monté notre charge utile compilée qui exploitera l'autorisation SUID, lui donnera des droits SUID, et exécutera à partir de la machine victime ce binaire (vous pouvez trouver ici quelques charges utiles C SUID).
Exploitation Locale
Notez que si vous pouvez créer un tunnel de votre machine vers la machine victime, vous pouvez toujours utiliser la version à distance pour exploiter cette élévation de privilèges en faisant transiter les ports requis.
Le tour de passe-passe suivant est en cas de fichier /etc/exports
indiquant une adresse IP. Dans ce cas, vous ne pourrez pas utiliser en aucun cas l'exploit à distance et vous devrez abuser de ce tour de passe-passe.
Une autre exigence nécessaire pour que l'exploit fonctionne est que l'exportation à l'intérieur de /etc/export
doit utiliser le drapeau insecure
.
--Je ne suis pas sûr que si /etc/export
indique une adresse IP, ce tour de passe-passe fonctionnera--
Informations de Base
Le scénario implique l'exploitation d'un partage NFS monté sur une machine locale, en exploitant une faille dans la spécification NFSv3 qui permet au client de spécifier son uid/gid, permettant potentiellement un accès non autorisé. L'exploitation implique l'utilisation de libnfs, une bibliothèque qui permet de forger des appels RPC NFS.
Compilation de la Bibliothèque
Les étapes de compilation de la bibliothèque peuvent nécessiter des ajustements en fonction de la version du noyau. Dans ce cas spécifique, les appels système fallocate ont été commentés. Le processus de compilation implique les commandes suivantes :
Réalisation de l'exploit
L'exploit consiste à créer un programme C simple (pwn.c
) qui élève les privilèges à root puis exécute un shell. Le programme est compilé et le binaire résultant (a.out
) est placé sur le partage avec suid root, en utilisant ld_nfs.so
pour falsifier l'uid dans les appels RPC :
Compiler le code de l'exploit :
Placer l'exploit sur le partage et modifier ses autorisations en falsifiant l'uid :
Exécuter l'exploit pour obtenir les privilèges root :
Bonus : NFShell pour un accès furtif aux fichiers
Une fois l'accès root obtenu, pour interagir avec le partage NFS sans changer la propriété (pour éviter de laisser des traces), un script Python (nfsh.py) est utilisé. Ce script ajuste l'uid pour correspondre à celui du fichier en cours d'accès, permettant d'interagir avec les fichiers sur le partage sans problèmes de permission :
Exécutez comme suit :
Références
Last updated