
Élévation de privilèges locale vers root via Sudo chroot sous Linux
Escalade de privilèges locale vers root via sudo chroot sous Linux.
Pour lire l'article, voir ici :
TL;DR et CMIIW Donc, sudo est une commande permettant d'exécuter une commande en tant qu'administrateur/root. Un utilisateur peut exécuter sudo s'il fait partie du groupe sudoers. Mais il existe un bug dans le binaire sudo qui permet à un utilisateur normal, sans permission, d'exécuter sudo et de passer en root.
Le bug réside dans une faille de l'option de commande sudo --chroot. Ce chroot permet d'exécuter une commande dans un répertoire temporaire. Le problème est que sudo vérifie le fichier de configuration dans ce répertoire temporaire avant de vérifier si l'utilisateur a le droit d'exécuter sudo.
Si ce fichier de configuration peut être modifié d'une manière ou d'une autre pour pointer vers un code modifié afin d'obtenir un accès root, nous pouvons obtenir un accès root sans authentification ni inscription comme sudoer. Car dans le processus, pour obtenir ces informations, le système élève la commande en root (temporairement).
Quel est ce fichier de configuration ? /etc/nsswitch.conf. Ce fichier de configuration est utilisé par le système pour savoir, par exemple, à quel groupe appartient un utilisateur, etc. Dans ce fichier nsswitch, cela ressemble à peu près à ceci :
<database> <source1> <source2> ... <sourcen>
passwd files systemd
group files systemd
shadow files
gshadow files
...
Eh bien ! Si la source de données utilisée est files, nss appellera une bibliothèque nommée libnss_files.so.2. Ce fichier contient du code C, et si nous le modifions, il est fort probable que nous puissions obtenir un accès root. Car le système exécute cela en tant que root, même si la commande n'est pas exécutée par un utilisateur sudoers. Voir le fichier exploit.sh
En résumé :
/etc/nsswitch.conf, dans un dossier que nous contrôlons.