
Уязвимость BDU:2020-00855 (CVE-2019-18634) Sudo
Уязвимость BDU:2020-00855 (CVE-2019-18634) переполнение буфера в функции stdin_getln
программы Sudo (1.7.1–1.8.26), позволяющее повышение привилегий.
Механизм: При включенной опции pwfeedback
в /etc/sudoers
неправильная обработка символов управления (Ctrl+U, Backspace) приводит к записи за границы стека.
Анализ уязвимости
Уровень опасности: 7.8 HIGH
Вектор атаки: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
-
AV:L (Вектор атаки: Локальный) - Атака требует физического или удаленного доступа к системе через оболочку.
-
AC:L (Сложность атаки: Низкая) - Эксплуатация не требует специальных условий.
-
PR:L (Уровень привилегий: Низкий) - Необходимы права обычного пользователя.
-
UI:N (Взаимодействие с пользователем: Отсутствует) - Атака автоматизирована.
-
S:U (Область воздействия: Не изменяется) - Уязвимость не затрагивает другие системы.
-
C:H (Конфиденциальность: Высокий) - Полный доступ к защищенным данным.
-
I:H (Целостность: Высокий) - Возможность модификации любых файлов.
-
A:H (Доступность: Высокий) - Возможность полного контроля над системой.
Условия эксплуатации
-
Версия Sudo 1.7.1–1.8.26 с активированной опцией
pwfeedback
(по умолчанию отключена). -
Доступ к системе: Локальный пользователь с правами выполнения
sudo
. -
Конфигурация: Параметр
pwfeedback
добавлен в/etc/sudoers
:Defaults pwfeedback
Технический анализ эксплойтов
Рассмотрим код эксплоитов для понимания работы вектора атаки с использованием уязвимости CVE-2019-18634.
1. Эксплойт на C (Ubuntu)
Механизм:
-
Создает псевдотерминал (
pty
) для обхода проверок терминала. -
Формирует payload с символами
sudo_term_kill
(Ctrl+U,0x15
) для сброса счетчика буфера. -
Перезаписывает флаг
tgetpass_flags
значением0x04
(TGP_ASKPASS), заставляя Sudo выполнить эксплойт как программу-запрос пароля. -
Обнуляет
user_details.uid
, отключая сброс привилегий.
Ключевой фрагмент:
uint8_t payload[OVERFLOW_SIZE + 5] = {0}; payload[KILL_OFFSET * 1] = sudo_term_kill; // 0x15 payload[TGP_OFFSET + 2] = TGP_ASKPASS; // 0x04 write(ptyfd, payload, sizeof(payload)); // Отправка вредоносных данных
2. Эксплойт self-contained.sh
Механизм:
-
Использует
socat
для эмуляции терминала. -
Генерирует Perl-скрипт, формирующий бинарный payload:
print("\x00\x15"x256 ... "\x04\x00\x00\x00" ... "\n"); // Запись в tgetpass_flags
-
Компилирует программу, которая устанавливает SUID-бит на себя при запуске через
sudo
.
Результат:
После выполнения /tmp/pipe
получает права root:
$ ls -l /tmp/pipe -rwsr-xr-x 1 root root 16744 Feb 15 09:23 /tmp/pipe
3. Эксплойт на Python (pwntools)
Механизм:
-
Открывает псевдотерминал с помощью
os.openpty()
. -
Формирует payload, перезаписывающий структуры памяти:
payload = (b'\x00\x15') * (tgetpass_flags - buf) # Заполнение буфера payload += p64(TGP_ASKPASS) # Установка флага payload += p32(0) * 10 # Обнуление user_details
-
Запускает reverse-shell при успехе.
4. Эксплойт для Linux Mint
Особенность:
Использует переменную окружения PLEASE_EXEC_MY_SHELL
для рекурсивного вызова эксплойта с правами root:
envp[1] = "PLEASE_EXEC_MY_SHELL=/bin/sh"; // Активация оболочки при повторном запуске
Что может получить злоумышленник?
-
Полные права root: Чтение/запись любых файлов (
/etc/shadow
, системные конфиги). -
Установка бэкдоров: Добавление SSH-ключей, модификация
crontab
. -
Атаки на соседние системы: Использование доверенных отношений (SSH, NFS).
-
Сбор конфиденциальных данных: Доступ к БД, файлам приложений.
Способы защиты
-
Обновление Sudo:
sudo apt update && sudo apt install sudo
Минимальная безопасная версия: 1.8.31.
-
Отключение
pwfeedback
:
Удалить строкуDefaults pwfeedback
из/etc/sudoers
. -
Контроль целостности бинарников:
Использованиеauditd
для мониторинга изменений:auditctl -w /usr/bin/sudo -p wa -k sudo_changes
-
Правило для Suricata (IDS):
Обнаружение активацииpwfeedback
в конфигах:alert tcp any any -> any any (msg:"Sudo pwfeedback exploitation attempt"; content:"Defaults"; content:"pwfeedback"; nocase; metadata:policy security-ips; sid:1000001;)
-
Mandatory Access Control:
Ограничение прав Sudo с помощью SELinux/AppArmor:# AppArmor профиль deny /usr/bin/sudo px, # Блокировка исполняемых файлов
