Suicide
28.01.2021, 20:22
Исследователи безопасности из компании Qualys выявили (https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit) критическую уязвимость (https://www.qualys.com/2021/01/26/cve-2021-3156/baron-samedit-heap-based-overflow-sudo.txt) (CVE-2021-3156 (https://security-tracker.debian.org/tracker/CVE-2021-3156)) в утилите sudo (https://www.sudo.ws/stable.html), предназначенной для организации выполнения команд от имени других пользователей. Уязвимость позволяет получить доступ с правами root без прохождения аутентификации и без наличия необходимых полномочий. Проблема может быть эксплуатирована любым пользователем, независимо от присутствия в системных группах и наличия записи в файле /etc/sudoers. Для атаки не требуется ввод пароля пользователя, т.е. уязвимость может применяться посторонним для повышения привилегий в системе после компрометации уязвимости в непривилегированном процессе (в том числе запускаемом под пользователем "nobody").
Исследователи продемонстрировали рабочие эксплоиты для получения полных привилегий root в Ubuntu 20.04, Debian 10 и Fedora 33. Не исключается возможность эксплуатации уязвимости и в других операционных системах и дистрибутивах, но проверка исследователями ограничилась Ubuntu, Debian и Fedora. Проблеме подвержены все версии sudo с 1.8.2 по 1.8.31p2 и с 1.9.0 по 1.9.5p1 в конфигурации по умолчанию. Исправление предложено (https://www.sudo.ws/alerts/unescape_overflow.html) в выпуске sudo 1.9.5p2.
Исследователи заранее уведомили разработчиков дистрибутивов, которые скоординировано уже выпустили обновления пакетов: Debian (https://security-tracker.debian.org/tracker/CVE-2021-3156), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-3156), Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=1920618), Ubuntu (https://ubuntu.com/security/notices/USN-4705-1), SUSE/openSUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2021-3156), Arch (https://security.archlinux.org/CVE-2021-3156), Slackware (http://www.slackware.com/security/viewer.php?l=slackware-security&y=2021&m=slackware-security.461226), Gentoo (https://bugs.gentoo.org/show_bug.cgi?id=CVE-2021-3156), FreeBSD (http://www.vuxml.org/freebsd/f3cf4b33-6013-11eb-9a0e-206a8a720317.html). Для проверки наличия уязвимости в своей системе достаточно запустить команду "sudoedit -s /". Уязвимость присутствует в случае вывода ошибки, начинающейся с "sudoedit:".
Уязвимость проявляется с июля 2011 года (https://github.com/sudo-project/sudo/commit/8255ed69) и вызвана переполнением буфера при обработке символов экранирования строки в параметрах, предназначенных для запуска команд в режиме shell. Режим shell включается при указании аргументов "-i" или "-s" и приводит к тому, что команда запускается не напрямую, а через дополнительный вызов командной оболочки с флагом "-c" ("sh -c команда"). Суть проблемы в том, что при штатном запуске утилита sudo экранирует специальные символы при указании опций "-i" и "-s", но при запуске утилиты sudoedit экранирования параметров не происходит, так как функция parse_args() выставляет переменную окружения MODE_EDIT вместо MODE_SHELL и не сбрасывает значение "valid_flags".
В свою очередь, передача неэкранированных символов создаёт условия для проявления ещё одной ошибки в обработчике, выполняющем удаление символов экранирования перед сверкой c правилами sudoers. Обработчик некорректно разбирает присутствие неэкранированного символа обратного слеша в конце строки, считает что данный обратный слеш экранирует ещё один символ и продолжает чтение данных, находящихся за границей строки, копируя их в буфер "user_args" и перезаписывая области памяти за границей данного буфера. Например, для вызова переполнения можно выполнить:
sudoedit -s '\' `perl -e 'print "A" x 65536'`
Манипулируя значениями в командной строке sudoedit можно добиться наложения перезаписываемого хвоста на данные, влияющие на дальнейший ход работы. Создание эксплоита упрощает то, что атакующий полностью контролирует размер буфера user_args, который соответствует размеру всех переданных аргументов, а также через переменные окружения контролирует размер и содержимое данных, записываемых за границу буфера. Исследователям удалось подготовить три эксплоита, работа которых строится на перезаписи содержимого структур sudo_hook_entry, service_user и def_timestampdir:
При переопределении sudo_hook_entry удалось запустить бинарный файл с именем "SYSTEMD_BYPASS_USERDB" с правами root.
При переопределении service_user удалось выполнить произвольный код с правами root.
При переопределении def_timestampdir удалось добиться сброса содержимого стека sudo, включая переменные окружения, в файл /etc/passwd, и добиться подстановки пользователя с правами root.
27.01.2021
https://www.opennet.ru/opennews/art.shtml?num=54474
Исследователи продемонстрировали рабочие эксплоиты для получения полных привилегий root в Ubuntu 20.04, Debian 10 и Fedora 33. Не исключается возможность эксплуатации уязвимости и в других операционных системах и дистрибутивах, но проверка исследователями ограничилась Ubuntu, Debian и Fedora. Проблеме подвержены все версии sudo с 1.8.2 по 1.8.31p2 и с 1.9.0 по 1.9.5p1 в конфигурации по умолчанию. Исправление предложено (https://www.sudo.ws/alerts/unescape_overflow.html) в выпуске sudo 1.9.5p2.
Исследователи заранее уведомили разработчиков дистрибутивов, которые скоординировано уже выпустили обновления пакетов: Debian (https://security-tracker.debian.org/tracker/CVE-2021-3156), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-3156), Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=1920618), Ubuntu (https://ubuntu.com/security/notices/USN-4705-1), SUSE/openSUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2021-3156), Arch (https://security.archlinux.org/CVE-2021-3156), Slackware (http://www.slackware.com/security/viewer.php?l=slackware-security&y=2021&m=slackware-security.461226), Gentoo (https://bugs.gentoo.org/show_bug.cgi?id=CVE-2021-3156), FreeBSD (http://www.vuxml.org/freebsd/f3cf4b33-6013-11eb-9a0e-206a8a720317.html). Для проверки наличия уязвимости в своей системе достаточно запустить команду "sudoedit -s /". Уязвимость присутствует в случае вывода ошибки, начинающейся с "sudoedit:".
Уязвимость проявляется с июля 2011 года (https://github.com/sudo-project/sudo/commit/8255ed69) и вызвана переполнением буфера при обработке символов экранирования строки в параметрах, предназначенных для запуска команд в режиме shell. Режим shell включается при указании аргументов "-i" или "-s" и приводит к тому, что команда запускается не напрямую, а через дополнительный вызов командной оболочки с флагом "-c" ("sh -c команда"). Суть проблемы в том, что при штатном запуске утилита sudo экранирует специальные символы при указании опций "-i" и "-s", но при запуске утилиты sudoedit экранирования параметров не происходит, так как функция parse_args() выставляет переменную окружения MODE_EDIT вместо MODE_SHELL и не сбрасывает значение "valid_flags".
В свою очередь, передача неэкранированных символов создаёт условия для проявления ещё одной ошибки в обработчике, выполняющем удаление символов экранирования перед сверкой c правилами sudoers. Обработчик некорректно разбирает присутствие неэкранированного символа обратного слеша в конце строки, считает что данный обратный слеш экранирует ещё один символ и продолжает чтение данных, находящихся за границей строки, копируя их в буфер "user_args" и перезаписывая области памяти за границей данного буфера. Например, для вызова переполнения можно выполнить:
sudoedit -s '\' `perl -e 'print "A" x 65536'`
Манипулируя значениями в командной строке sudoedit можно добиться наложения перезаписываемого хвоста на данные, влияющие на дальнейший ход работы. Создание эксплоита упрощает то, что атакующий полностью контролирует размер буфера user_args, который соответствует размеру всех переданных аргументов, а также через переменные окружения контролирует размер и содержимое данных, записываемых за границу буфера. Исследователям удалось подготовить три эксплоита, работа которых строится на перезаписи содержимого структур sudo_hook_entry, service_user и def_timestampdir:
При переопределении sudo_hook_entry удалось запустить бинарный файл с именем "SYSTEMD_BYPASS_USERDB" с правами root.
При переопределении service_user удалось выполнить произвольный код с правами root.
При переопределении def_timestampdir удалось добиться сброса содержимого стека sudo, включая переменные окружения, в файл /etc/passwd, и добиться подстановки пользователя с правами root.
27.01.2021
https://www.opennet.ru/opennews/art.shtml?num=54474