
Специалист компании Apple Джо Венникс рассказал об уязвимости (CVE-2019-14287) в команде sudo в Linux. Она позволяет непривилегированным пользователям запускать команды с правами суперпользователя.
Однако данная проблема возникает лишь при нестандартных настройках конфигурации и не затрагивает большинство Linux-серверов.
Команда sudo дает возможность непривилегированным пользователям с соответствующим разрешением или паролем суперпользователя выполнять на Linux-машинах команды с его правами. При добавлении инструкций в конфигурационный файл /etc/sudoers систему можно настроить для запуска команд от имени другого пользователя, однако это невозможно в отношении суперпользователя. Именно при этих настройках конфигурации пользователи могут обойти ограничения и запускать команды с привилегиями суперпользователя, добавив в командную строку -u#-1, выяснил Венникс.
Специалист приводит пример: администратор создал на сервере mybox пользователя sudo с именем bob, добавив в конфигурационный файл строку mybox bob = (ALL, !root) /usr/bin/vi. Пользователь bob сможет запускать текстовый редактор Vi, однако, если он запустит команду sudo -u#-1 vi, то сможет делать это уже с привилегиями суперпользователя.
Венникс отметил, что -u#1234 может использоваться как идентификатор пользователя 1234 в командной строке с sudo для запуска команд, в данном случае Vi. Sudo передает это значение идентификатора через системные вызовы setresuid и setreuid для изменения эффективного ID пользователя команды. -u#-1 же передает через вызовы -1 для изменения эффективного идентификатора на -1. Идентификатор пользователя 4294967295 тоже может обходить ограничения, поскольку, будучи знаковой 32-разрядной целочисленной переменной, он равен -1.
Специалист посоветовал пользователям обновить sudo до версии 1.8.28 или более поздней версии, так как в них -1 больше не принимается в качестве идентификатора
Исправление также доступно в форме патча. В дистрибутивах уязвимость уже устранена в Debian, Arch Linux, SUSE/openSUSE, Ubuntu, Gentoo и FreeBSD.
Комментарии (9)
staticmain
15.10.2019 16:30
U16.04, ЧЯДНТ?$ sudo -u#-1 whoami [sudo] пароль для alex:
namikiri
15.10.2019 16:40Введите пароль. В теории, даже не-sudoer станет рутом.
Meklon
15.10.2019 16:59+4Не совсем. Нужно быть упомянутым в sudoers. И иметь переменную ALL, от имени которых можно выполнять команду.
Уязвимость очень ограниченная.
- Обход запрета использования Всех кроме Root
myhost bob = (ALL, !root) /usr/bin/vi
- В логах будет запуск от пользователя -1, а не root, что потенциально ломает аналитику и расследование инцидентов
- Так как пользователь -1 отсутствует, к нему не будут применены никакие модули PAM.
Большинство записей в sudoers с переменной ALL и так подразумевают, что у пользователя полные права, включая root. Здесь минус только в маскировке логов.
Единственная потенциальная серьезная опасность – записи с исключением (ALL, !root). Тогда пользователь может получить несанкционированный root в системе.- Обход запрета использования Всех кроме Root
androidovshchik
15.10.2019 18:02На Fedora 30 интереснее
$ sudo -u#-1 whoami vlad is not in the sudoers file. This incident will be reported.
maxzhurkin
15.10.2019 20:42А кто будет добавлять в /etc/sudoers строку
vlad myhost = (ALL, !root) /usr/bin/whoami
?
maxzhurkin
15.10.2019 20:45Вы забыли добавить в /etc/sudoers строку
alex myhost = (ALL, !root) /usr/bin/whoami
byme
Какое отношение эта статья имеет к
byme
Уже убрали.