Что имеем:
Параметр Sudo pwfeedback может использоваться для обеспечения визуальной обратной связи, когда пользователь вводит свой пароль. Для каждого нажатия клавиши печатается звездочка. Эта опция была добавлена в ответ на путаницу пользователей по поводу того, как стандартная подсказка Password: отключает отображение нажатий клавиш. Хотя pwfeedback не включен по умолчанию в исходной версии sudo, некоторые системы, такие как Linux Mint и Elementary OS, включают его в своих файлах sudoers по умолчанию. Из-за ошибки, когда опция pwfeedback включена в файле sudoers, пользователь может вызвать переполнение буфера в стеке. Эта ошибка может быть вызвана даже пользователями, не указанными в файле sudoers. Нет никакого влияния, если pwfeedback не был включен.
Изменения в версиях Sudo:
С версии Sudo 1.7.1 до 1.8.25p1 включительно это имеет значение, но только если в sudoers включена опция pwfeedback. Хотя логическая ошибка также присутствует в версиях sudo с 1.8.26 по 1.8.30, она не может быть использована из-за изменений в обработке EOF, представленных в sudo 1.8.26.
Пользователь с привилегиями sudo может проверить, включен ли pwfeedback, запустив:
sudo -l
Если pwfeedback указан в выходных данных «Дефолтные записи по умолчанию», это повлияет на конфигурацию sudoers. В следующем примере конфигурация sudoers уязвима:
Код:
$ sudo -l
Matching Defaults entries for millert on linux-build:
insults, pwfeedback, mail_badpass, mailerpath=/usr/sbin/sendmail
User millert may run the following commands on linux-build:
(ALL : ALL) ALL
CVE ID:
This vulnerability has been assigned
Ссылка скрыта от гостей
in the
Ссылка скрыта от гостей
database.Детали:
Эксплуатация ошибки не требует разрешений sudo, просто включите pwfeedback. Ошибка может быть воспроизведена путем передачи большого ввода в sudo через канал, когда он запрашивает пароль. Например:
Код:
$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Password: Segmentation fault
Есть два недостатка, которые способствуют этой уязвимости:
- Параметр pwfeedback не игнорируется, как должно быть, при чтении с чего-либо другого, кроме терминального устройства. Из-за отсутствия терминала сохраненная версия символа стирания строки остается в своем первоначальном значении 0.
- Код, удаляющий строку звездочек, не сбрасывает должным образом позицию буфера в случае ошибки записи, но сбрасывает оставшуюся длину буфера. В результате функция getln () может записывать после конца буфера.
Влияние:
Это не повлияет, если pwfeedback не включен в файле sudoers.
Если в sudoers включен pwfeedback, переполнение стека может позволить непривилегированным пользователям перейти в корневую учетную запись. Поскольку злоумышленник полностью контролирует данные, используемые для переполнения буфера, существует высокая вероятность использования.
Временное решение:
Если в файле sudoers включена функция pwfeedback, достаточно отключить его, ожидая восклицательный знак, чтобы предотвратить использование ошибки. Например, изменить:
Defaults pwfeedback
На:
Defaults !pwfeedback
После отключения pwfeedback в sudoers с помощью команды visudo, пример вывода sudo -l становится:
Код:
$ sudo -l
Matching Defaults entries for millert on linux-build:
insults, mail_badpass, mailerpath=/usr/sbin/sendmail
User millert may run the following commands on linux-build:
(ALL : ALL) ALL
Исправлено:
Баг был исправлен в sudo 1.8.31.
Баг был обнаружен и проанализирован Joe Vennix из Apple Information Security
Источник:
Ссылка скрыта от гостей
Последнее редактирование: