
анализ переполнения буфера в sudo, затрагивающего версии sudo <1.8.26, и как использовать GCC для компиляции публично доступных эксплойтов
Анализ CVE-2019-18634 (https://www.exploit-db.com/exploits/47995)
Sudo 1.8.25p - переполнение буфера 'pwfeedback' (PoC)
Опция pwfeedback в sudo может использоваться для обеспечения визуальной обратной связи, когда пользователь вводит свой пароль. При каждом нажатии клавиши выводится звёздочка. Эта опция была добавлена в ответ на замешательство пользователей по поводу того, как стандартное приглашение Password: отключает эхо-вывод нажатий клавиш. Хотя pwfeedback по умолчанию не включён в основной версии sudo, некоторые системы, такие как Linux Mint и Elementary OS, включают его в своих файлах sudoers по умолчанию.
Анализ
Разбор переполнения буфера sudo tryhackme
Анализ CVE-2019-18634
Сначала мы входим в экземпляр tryhackme по SSH.
Уязвимость возникает из-за того, что функция pwfeedback уязвима к переполнению буфера в куче. Чтобы использовать эту уязвимость, мы сначала проверяем, что на машине установлена уязвимая версия sudo(sudo <1.8.26), выполнив команду sudo –version.
Анализ CVE-2019-18634
Сначала мы входим в экземпляр tryhackme по SSH.
Уязвимость возникает из-за того, что функция pwfeedback уязвима к переполнению буфера в куче. Чтобы использовать эту уязвимость, мы сначала проверяем, что на машине установлена уязвимая версия sudo(sudo <1.8.26), выполнив команду sudo –version.

Подтвердив, что на машине установлена уязвимая версия sudo, мы затем проверяем наличие функции owfeedback; это можно сделать двумя способами: вызвав sudo и введя что-либо в запрос пароля, при этом при вводе символов пароля должны отображаться “*”; второй, более технический способ — использовать команду sudo -l, но он также потребует, чтобы у пользователя были соответствующие разрешения, позволяющие просматривать информацию о sudo или иметь возможность выводить содержимое файла sudoers.

Теперь мы подтвердим, что переполнение буфера возможно, используя тестовый пример с exploit-db https://www.exploit-db.com/exploits/47995
perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id ^^Строка кода выше работает следующим образом:
Добавляем 100 символов A и передаём их в команду sudo, после чего они попадут в буфер в куче для pwfeedback.

Затем sudo завершится с ошибкой сегментации, так как не знает, как продолжить процесс sudo.
Это происходит потому, что когда статический буфер в куче переполняется, данные начинают переполнять регистры ЦП и указатель инструкций, который управляет потоком выполнения следующей инструкции.
Мы можем запустить эксплойт, который вызовет переполнение буфера и предоставит нам root-доступ к системе https://www.exploit-db.com/exploits/47995
