Исследователи безопасности Qualys выявили критическую уязвимость (CVE-2021-3156) в утилите sudo, который предназначен для организации выполнения команд от имени других пользователей.
Уязвимость разрешает неаутентифицированный доступ с привилегиями root. Проблема может использоваться любым пользователем, вне зависимости от наличия в системных группах и наличия записи в файле / etc / sudoers.
Атака не требует ввода пароля пользователя, то есть уязвимость может быть использована внешним лицом для повышения привилегий в системе после того, как уязвимость была скомпрометирована в непривилегированном процессе (включая те, которые были запущены пользователем «никто»).
Чтобы найти уязвимость в вашей системе, просто запустите команду «sudoedit -s /», и уязвимость присутствует, если отображается сообщение об ошибке, начинающееся с «sudoedit:».
Об уязвимости
Уязвимость появилась с июля 2011 года и вызвана переполнением буфера. при обработке escape-символов строки в параметрах, предназначенных для выполнения команд в режиме оболочки. Режим оболочки включается указанием аргументов «-i» или «-s» и вызывает выполнение команды не напрямую, а через дополнительный вызов оболочки с флагом «-c» («sh -c command»).
Суть в том, что, когда утилита sudo запускается в обычном режиме, она экранирует специальные символы, указывая параметры «-i» и «-s», но при запуске утилиты sudoedit параметры не экранируются, как parse_args () Функция устанавливает переменную среды MODE_EDIT вместо MODE_SHELL и не сбрасывает значение «valid_flags».
В свою очередь, передача неэкранированного символа создает условия для появления другой ошибки в контроллере, который удаляет escape-символы перед проверкой правил sudoer.
Обработчик неправильно анализирует наличие символа обратной косой черты без экранирования в конце строки, он считает, что эта обратная косая черта экранирует еще один символ и продолжает читать данные за пределами строки, копируя их в буфер «user_args» и перезаписывая области памяти вне буфера.
Также упоминается, что при попытке манипулировать значениями в командной строке sudoedit злоумышленник может добиться наложения перезаписываемой очереди в данных, что влияет на последующий ход работы.
Помимо создания эксплойта, он упрощает тот факт, что злоумышленник имеет полный контроль над размером буфера user_args, который соответствует размеру всех переданных аргументов, а также контролирует размер и содержание данных, записываемых вне буфера, используя переменные среды.
Исследователям безопасности Qualys удалось подготовить три эксплойта, работа которых основана на переписывании содержимого структур sudo_hook_entry, service_user и def_timestampdir:
- Прервав sudo_hook_entry, можно запустить двоичный файл с именем «SYSTEMD_BYPASS_USERDB» от имени пользователя root.
- При переопределении service_user удалось запустить произвольный код от имени пользователя root.
- Переопределив def_timestampdir, можно было сбросить содержимое стека sudo, включая переменные среды, в файл / etc / passwd и добиться замены пользователя с привилегиями root.
Исследователи показали, что эксплойты работают получить полные привилегии root в Ubuntu 20.04, Debian 10 и Fedora 33.
Уязвимость может использоваться в других операционных системах и дистрибутивах, но проверка исследователей была ограничена Ubuntu, Debian и Fedora, плюс упоминается, что затронуты все версии sudo 1.8.2–1.8.31p2 и 1.9.0–1.9.5p1 в настройках по умолчанию. Предлагаемое решение в sudo 1.9.5p2.
Исследователи заранее уведомили разработчиков распространители, которые уже скоординированно выпустили обновления пакетов: Debian, RHEL, Fedor, Ubuntu, SUSE / openSUSE, Arch Linux, Slackware, Gentoo и FreeBSD.
В конце концов если вам интересно узнать об этом больше об уязвимости вы можете уточнить подробности По следующей ссылке.