25.09.2020

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


В утилите sudo, используемой для организации выполнения команд от имени других пользователей, выявлена уязвимость (CVE-2019-18634), позволяющая повысить свои привилегии в системе до пользователя root. Проблема проявляется начиная с выпуска sudo 1.7.1 только при использовании в файле /etc/sudoers опции «pwfeedback», которая отключена по умолчанию, но активирована в некоторых дистрибутивах, таких как Linux Mint и Elementary OS. Проблема устранена в выпуске sudo 1.8.31, опубликованном несколько часов назад. В дистрибутивах уязвимость пока остаётся неисправленной.

Опция «pwfeedback» включает отображение символа «*» после каждого введённого символа при вводе пароля. Из-за ошибки в реализации функции 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  

Источник: https://www.opennet.ru/opennews/art.shtml?num=52284

Добавить комментарий