Root-уязвимость в sudo, затрагивающая Linux Mint и Elementary OS

Na akụrụngwa sudo, eji hazie mmezu nke iwu n'aha ndị ọrụ ndị ọzọ, mara adịghị ike (CVE-2019-18634), позволяющая повысить свои привилегии в системе до пользователя root. Проблема проявляется начиная с выпуска sudo 1.7.1 только при использовании в файле /etc/sudoers опции «pwfeedback», которая отключена по умолчанию, но активирована в некоторых дистрибутивах, таких как Linux Mint и Elementary OS. Проблема устранена в выпуске sudo ngwa ngwa 1.8.31, опубликованном несколько часов назад. В дистрибутивах уязвимость пока остаётся неисправленной.

Опция «pwfeedback» включает отображение символа «*» после каждого введённого символа при вводе пароля. Из-за njehie в реализации функции getln(), определённой в файле tgetpass.c, переданная через стандартный входной поток (stdin) слишком большая строка с паролем при определённых условиях может не уместиться в выделенный буфер и переписать другие данные в стеке. Переполнение возникает во время выполнения кода sudo с правами root.

Суть проблемы в том, что при использовании в процессе ввода спецсимвола ^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

isi: opennet.ru

Tinye a comment