Еще одна ошибка в коде популярной утилиты 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. — Подобные программы требуют “особого присмотра”, и к счастью, эксперты по безопасности весьма внимательно отслеживают уязвимости в ней. Самое главное, чтобы конечные пользователи не затягивали с установкой необходимых обновлений».