В утилите sudo, используемой для организации выполнения команд от имени других пользователей, выявлена уязвимость (CVE-2019-18634), которая позволяет повысить свои привилегии в системе.
Проблема проявляется начиная с выпуска sudo 1.7.1 только при использовании в файле /etc/sudoers опции «pwfeedback», которая отключена по умолчанию, но активирована в некоторых дистрибутивах, таких как Linux Mint и Elementary OS. Проблема устранена в выпуске sudo 1.8.31, опубликованном несколько часов назад. В дистрибутивах уязвимость пока остаётся неисправленной.
Опция «pwfeedback» включает отображение символа «*» после каждого введённого символа при вводе пароля. Из-за ошибки в реализации функции getln(), определённой в файле tgetpass.c, переданная через стандартный входной поток (stdin) слишком большая строка с паролем при определённых условиях может не уместиться в выделенный буфер и переписать другие данные в стеке.
Суть проблемы в том, что при использовании в процессе ввода спецсимвола ^U (очистка строки) и сбое операции записи, данные о доступном для записи размере буфера сбрасываются, но указатель не возвращается в исходное значение.
Другим фактором, способствующим эксплуатации, является отсутствие автоматического отключения режима «pwfeedback» при поступлении данных не с терминала, а через входной поток (данная недоработка позволяет создать условия для возникновения ошибки записи).
Так как атакующий может полностью контролировать перезапись данных в стеке, не представляет трудности создание эксплоита, позволяющего повысить свои привилегии до пользователя root. Проблема может быть эксплуатирована любым пользователем, независимо от прав на использование sudo и наличия специфичных для пользователя настроек в sudoers.
Для блокирования проблемы следует убедиться в отсутствии в /etc/sudoers настройки «pwfeedback» и при необходимости отключить её («Defaults !pwfeedback»). Для проверки наличия проблемы можно выполнить код:
$ perl -e 'print(("A" x 100 . "x{00}") x 50)' | sudo -S id Password: Segmentation fault