В sudo устранена уязвимость, позволяющая переписать файл на системах с SELinux

В утилите sudo, применяемой для организации выполнения команд от имени других пользователей, выявлена опасная уязвимость (CVE-2017-1000367).

Проблема позволяет переписать любой файл в системе, например, /etc/shadow, и проявляется только если пользователю делегировано выполнение определённых привилегированных операций в /etc/sudoers, в системе включен SELinux и sudo собран с поддержкой SELinux. Уязвимость устранена в обновлении sudo 1.8.20p1, а также в пакетах дистрибутивов RHEL 6/7, Fedora, Ubuntu, Debian, SUSE и openSUSE.

Уязвимость эксплуатируется через создание символической ссылки на исполняемый файл sudo, с заданием для ссылки имени, содержащем пробел, после которого следует число. При разборе файла /proc/[pid]/stat после запуска по такой ссылке программа sudo пытается определить номер устройства tty, к которому прикреплён текущий процесс, но так как в качестве разделителей /proc/[pid]/stat применяются пробелы, запуск через ссылку с пробелом в имени нарушает порядок разбора и позволяет подставить фиктивный номер устройства, не связанные с каким-то уже существующим устройством в каталоге /dev. Используя данный фиктивный номер устройства sudo не может найти терминал текущего процесса в каталоге /dev/pts, после чего пытается найти устройство в каталоге /dev.

Атакующий может подобрать момент и создать новый псевдотерминал в момент, когда sudo уже проверил /dev/pts но ещё не начал проверку в /dev (например, используя inotify для отслеживания открытия каталога), и установить на него символическую ссылку в каталоге /dev (напирмер, каталог /dev/shm доступен всем на запись), после чего данный файл будет воспринят sudo как текущий терминал. При указании роли SELinux через опцию «-r role» в командной строке при вызове sudo, данное устройство будет использовано для stdin, stdout и stderr. Заменив символическую ссылку с псевдотерминала на реальный файл, можно переписать его содержимое (sudo выводит в stderr все аргументы командной строки в случае ошибки, например, можно вместо опции передать ‘—\nHELLO\nWORLD\n’). Например, переписав /etc/shadow или /etc/sudoers можно получить полномочия root.

root

Оцените новость: 
Средняя: 2.6 (55 оценки)