Еще одна ошибка в коде популярной утилиты Sudo угрожает пользователям UNIX, Linux и macOS. Баг позволяет запускать произвольный код с правами суперпользователя даже тем, у кого в системе для этого не должно быть полномочий.
UNIX, Linux и примкнувшая к ним macOS
Эксперт по кибербезопасности Apple Джо Венникс (Joe Vennix) обнаружил опасную уязвимость в широкораспространенной системной утилите Sudo (Superusersdo), которая есть практически в каждой ОС на базе UNIX/Linux, в том числе в macOS, и позволяет непривилегированным пользователям этих операционных систем осуществлять запуск команд с привилегиями суперпользователя (root).
Градус проблемы снижен тем фактом, что для успешной эксплуатации необходимы особые условия.
Утилита Sudo применяется во всех UNIX-подобных системах, включая любые дистрибутивы Linux, а также macOS. Она позволяет запускать нужные пользователю программы с расширенными привилегиями. По умолчанию — с правами superuser; старые версии Sudo подразумевали запуск программ только в качестве суперпользователя.
Какие пользователи имеют право на запуск Sudo и какие программы они могут запускать, в UNIX-образных системах определяется в файле /etc/sudoers.
Однако уязвимость CVE-2019-18634 может быть использована для запуска программ даже теми пользователями, которые в списке sudoers отсутствуют. Это, впрочем, возможно только в тех случаях, когда в /etc/sudoers активирована опция pwfeedback.
«В версиях Sudo до 1.8.26, если pwfeedback активирован в /etc/sudoers/, пользователи могут вызвать стековое переполнение буфера в привилегированном процессе Sudo (pwfeedback активирован по умолчанию в Linux Mint и elementary OS (коммерческая операционная система на базе Ubuntu Linux; — прим. CNews); однако в других версиях и дистрибутивах это не так: pwfeedback может быть только специально активирован администратором», — говорится в бюллетене NIST.
Не далее как в октябре 2019 г. в Sudo находили еще одну серьезную уязвимость, также позволявшую обходить ограничения, прописанные в sudoers. Первооткрывателем того бага также стал Джо Венникс.
В чем причина
Сам разработчик Sudo Тодд Миллер (ToddC. Miller) признал наличие проблемы. По его словам, для эксплуатация бага злоумышленнику потребуется при обращении к Sudo через команду pipe вместо запрашиваемого пароля ввести следующий код: «$ perl -e ‘print((«A» x 100 . «\x{00}») x 50)’ | sudo -Sid»; Password: «Segmentationfault».
Причина уязвимости в двух ошибках. Во-первых, опция pwfeedback не игнорируется при считывании с чего-либо кроме конечного устройства. В отсутствие терминала сохраненная версия символа удаления строки остается в своем первоначальном значении 0.
Во-вторых, код, который удаляет строку, состоящую из зведочек, некорректно сбрасывает позицию буфера в случае ошибки записи, но зато сбрасывает остающуюся длину буфера. В результате функция getIn() может производить запись в область, располагающуюся за пределами буфера.
В файле Sudoers функцию Defaults pwfeedback можно отключить, поставив перед вторым словом восклицательный знак.
Исправления внесены в версии Sudo 1.8.31. Уязвимость в версиях 1.8.26-30 присутствует, но ей невозможно воспользоваться, поскольку в версии 1.8.26 изменен принцип обработки окончаний файлов.
«Серьезные уязвимости в утилите Sudo опасны уже тем, насколько она распространена и какие возможности открывает в случае успешной эксплуатации багов в ней, — говорит Дмитрий Кирюхин, эксперт по информационной безопасности компании SECConsultServices. — Подобные программы требуют “особого присмотра”, и к счастью, эксперты по безопасности весьма внимательно отслеживают уязвимости в ней. Самое главное, чтобы конечные пользователи не затягивали с установкой необходимых обновлений».