В OpenSSH найдена критическая уязвимость, позволяющая удалённо выполнить код с правами root на 32-bit серверах с Glibc
1 июля 2024 года эксперты по ИБ из Qualys опубликовали информацию, что в OpenSSH (с версии >= 8.5 и < 4.4) обнаружена критическая уязвимость CVE-2024—6387 под названием regreSSHion, позволяющая удалённо выполнить код с правами root на серверах и пользовательских ПК со стандартной библиотекой Glibc.
По информации OpenNET, эксперты продемонстрировали возможность совершения атаки на 32-разрядной системе с Glibc с включённой защитой ASLR (рандомизация адресного пространства). Для успешной атаки в лабораторных условиях потребовалось 6-8 часов, в течение которых с сервером непрерывно устанавливались соединения с максимально допустимой в конфигурации sshd интенсивностью. Совершение атаки упрощается и требует меньше времени на системах без ASLR или в дистрибутивах, использующих модифицированный OpenSSH, в котором отключена повторная рандомизация ASLR для каждого соединения. Рабочий прототип эксплоита до повсеместного устранения уязвимости решено не публиковать публично, но при этом доступно достаточно подробное описание сути уязвимости, которое делает появление сторонних эксплоитов делом времени.
Не исключается возможность совершения атаки и на 64-разрядные системы, но рабочий эксплоит для таких систем пока не готов. Предполагается, что проведение атаки на 64-разрядные системы будет занимать гораздо больше времени, но не более недели. OpenSSH в OpenBSD проблеме не подвержен, так как в данной системе с 2001 года применяется механизм защиты, блокирующий подобные классы атак. В других системах на основе стандартных библиотек, отличных от Glibc, теоретически возможна адаптация метода для совершения атаки (в Qualys данный вопрос пока не изучался).
Патч против уязвимости CVE-2024—6387 представлен в выпуске OpenSSH 9.8. Проследить за публикацией обновлений пакетов в дистрибутивах можно на страницах других проектов, включая Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Rosa Linux, Gentoo, ALT Linux, Arch и FreeBSD.
В качестве обходного пути блокирования уязвимости в sshd_config эксперты советуют выставить параметр «LoginGraceTime=0», при этом отключение таймаута упростит инициирование отказа в обслуживании при установке большого числа соединений, превышающих лимиты, заданные через параметр MaxStartups. Одним из признаков попыток совершения атаки является появление в логе большого числа записей «Timeout before authentication».
Уязвимость CVE-2024—6387 появилась в результате регрессивного изменения, вошедшего в состав выпуска OpenSSH 8.5 и приводящего к состоянию гонки в коде обработки сигналов в sshd. Регрессия привела к прекращению действия защиты от старой уязвимости CVE-2006—5051, проявлявшейся до версии OpenSSH 4.4 (2006 год) и носившей теоретический характер. В ходе разработки OpenSSH 8.5 по ошибке из функции sigdie (), которая напрямую вызывается из обработчика SIGALRM, был удалён блок «#ifdef DO_LOG_SAFE_IN_SIGHAND».
Обработчик SIGALRM вызывается в sshd в асинхронном режиме, если клиент не выполнил аутентификацию в течение времени, ограниченного таймаутом подключения (LoginGraceTime, по умолчанию 120 сек). Атака основана на том, что обработчик сигнала вызывает функции не безопасные при асинхронной обработке сигналов, такие как syslog (). Функция syslog () в Glibc не рассчитана на использование в асинхронно выполняемых обработчиках сигналов, так как вызывает функции malloc () и free (). Срабатывание сигнала SIGALRM, прерывающего работу определённого кода в sshd, может привести к нарушению состояния выполнения, а задача эксплоита сводится к созданию условий для прерывания нужного кода в необходимый момент его выполнения. Уязвимость не затрагивает OpenBSD, так как в нём вместо syslog () из обработчика сигнала SIGALRM вызывается функция syslog_r (), специально созданная для асинхронного запуска.
OpenSSH является самой распространённой реализацией протокола SSH в мире (даже в Windows). SSH является самым распространённым протоколом удалённого подключения в мире (в основном конечно UNIX-системы). Уязвимость CVE-2024—6387 позволяет случайному лицу исполнить что-то на целевом сервере с привилегиями администратора. Ей подвержены не все версии: OpenSSH < 4.4p1 — уязвимы, 4.4p1 <= OpenSSH < 8.5p1 — скорее всего с ними всё нормально, 8.5p1 <= OpenSSH < 9.8p1 — уязвимы.
Источник: habr.com