PDA

Просмотр полной версии : Root-уязвимость в sudo, затрагивающая Linux Mint и Elementary OS


Suicide
31.01.2020, 20:32
В утилите sudo (https://www.sudo.ws/), используемой для организации выполнения команд от имени других пользователей, выявлена (https://www.openwall.com/lists/oss-security/2020/01/30/6) уязвимость (CVE-2019-18634 (https://security-tracker.debian.org/tracker/CVE-2019-18634)), позволяющая повысить свои привилегии в системе до пользователя root. Проблема проявляется начиная с выпуска sudo 1.7.1 только при использовании в файле /etc/sudoers опции "pwfeedback", которая отключена по умолчанию, но активирована в некоторых дистрибутивах, таких как Linux Mint и Elementary OS. Проблема устранена в выпуске sudo 1.8.31 (https://github.com/sudo-project/sudo/releases/tag/SUDO_1_8_31), опубликованном несколько часов назад. В дистрибутивах уязвимость пока остаётся неисправленной.

Опция "pwfeedback" включает отображение символа "*" после каждого введённого символа при вводе пароля. Из-за ошибки (https://github.com/sudo-project/sudo/commit/fa8ffeb17523494f0e8bb49a25e53635f4509078) в реализации функции getln(), определённой в файле tgetpass.c, переданная через стандартный входной поток (stdin) слишком большая строка с паролем при определённых условиях может не уместиться в выделенный буфер и переписать другие данные в стеке. Переполнение возникает во время выполнения кода sudo с правами root.

Суть проблемы в том, что при использовании в процессе ввода спецсимвола ^U (очистка строки) и при сбое операции записи, код, отвечающий за очистку выведенных символов "*", сбрасывает данные о доступном размере буфера, но не возвращает в исходное значение указатель на текущую позицию в буфере. Другим фактором, способствующим эксплуатации, является отсутствие автоматического отключения режима "pwfeedback" при поступлении данных не с терминала, а через входной поток (данная недоработка позволяет создать условия для возникновения ошибки записи, например, на системах с однонаправленными неименованными каналами (https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D 0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%B0%D0%BD%D0 %B0%D0%BB) ошибка возникает при попытке записи за конец канала для чтения).

Так как атакующий может полностью контролировать перезапись данных в стеке, не представляет трудности создание эксплоита, позволяющего повысить свои привилегии до пользователя root. Проблема может быть эксплуатирована любым пользователем, независимо от прав на использование sudo и наличия специфичных для пользователя настроек в sudoers. Для блокирования проблемы следует убедиться в отсутствии в /etc/sudoers настройки "pwfeedback" и при необходимости отключить её ("Defaults !pwfeedback"). Для проверки наличия проблемы можно выполнить код:

$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id

Password: Segmentation fault

31.01.2020

http://www.opennet.ru/opennews/art.shtml?num=52284​