ИБ-специалисты обнаружили новую уязвимость в пакетах OpenSSH, входящих в состав Red Hat Enterprise Linux 9 (RHEL 9). Проблема получила обозначение CVE-2024-6409, она отличается от ранее выявленной regreSSHion и позволяет злоумышленникам выполнять код на удалённом сервере без прохождения аутентификации. Уязвимость также затрагивает пакеты для Fedora Linux 36 и 37.
Уязвимость связана с состоянием гонки (Race Condition) в обработчике прерывания SIGALRM, которое возникает из-за выполнения функций, не рассчитанных на асинхронное выполнение из обработчиков сигналов. Обработчик срабатывает при наступлении таймаута, определённого параметром LoginGraceTime, что приводит к прерыванию текущего выполнения кода. Вызов функций, таких как syslog(), которые применяют динамическое выделение памяти, может повредить внутренние структуры malloc при срабатывании SIGALRM.
CVE-2024-6409 тесно связана с вызовом функции cleanup_exit() в обработчике сигнала grace_alarm_handler(). В основной кодовой базе OpenSSH этот вызов не приводит к проблемам, но в пакетах для RHEL 9 и Fedora был добавлен патч, который добавляет в cleanup_exit() вызов функции для генерации событий аудита. Как оказалось, эта функция не рассчитана на использование в обработчиках сигналов.
Патч, который привёл к уязвимости, использовался в RHEL 9 и производных дистрибутивах на базе OpenSSH 8.7p1. В последних версиях Fedora проблема не проявляется, так как начиная с Fedora 38 используется более новая версия OpenSSH, в которой функция cleanup_exit() осталась без изменений.
Для устранения уязвимости в конфигурации sshd (sshd_config) рекомендуется установить параметр LoginGraceTime в 0. Этот метод блокирует уязвимость, несмотря на то, что стандартные способы защиты, такие как использование опции “-e” для отключения вывода логов через syslog, неэффективны.
Как можно заметить, даже исправление программных недостатков, преследующее благие цели, порой может привести к непредвиденным последствиям для безопасности других элементов системы. Этот случай наглядно показывает важность тщательного тестирования любых модификаций, особенно в критически важных компонентах ОС. Поддержание баланса между специфическими требованиями и общей безопасностью остаётся сложной, но необходимой задачей в мире информационных технологий.