Уязвимость в OpenSSL вызывает переполнение памяти серверов.




Исследователи безопасности из Okta Security обнаружили уязвимость типа «отказ в обслуживании» в OpenSSL, с помощью которой злоумышленники могут без предварительной аутентификации чрезмерно загружать память веб-серверов и других систем. Согласно отчету исследователей (открывается в новом окне), для эксплуатации уязвимости, получившей название Hollowbyte, достаточно отправить уязвимой системе пакеты данных объемом всего одиннадцать байт.

По имеющимся данным, проблема кроется в TLS-рукопожатии для установки соединения. Первоначальные сообщения рукопожатия типа Client Hello (открывается в новом окне) содержат 4-байтовый заголовок, в котором указывается размер последующего тела входящего сообщения.

По словам Okta, более старые версии OpenSSL на основе этой информации резервируют память для приемного буфера — причем до того, как ожидаемые данные фактически поступят. Злоумышленник может неоднократно вызывать такое резервирование с помощью полезной нагрузки в 11 байт. При этом каждый раз резервируется до 131 Кбайт.

Память остается заблокированной навсегда

Проблема усугубляется тем, что зарезервированная память не освобождается в обозримом будущем, так как соответствующий рабочий поток бесконечно долго ожидает данные, которые так и не поступают. OpenSSL освобождает память только при разрыве соединения.

Однако с помощью трюка, связанного с библиотекой GNU C (Glibc), исследователям удалось заблокировать память и после этого. «Glibc не возвращает операционной системе выделения памяти малого и среднего размера немедленно, а сохраняет их для возможного повторного использования», — говорится в сообщении Okta.

Поэтому злоумышленник может предотвратить освобождение памяти, резервируя различные случайно выбранные объемы памяти. Таким образом оперативная память остается занятой, даже если злоумышленник разорвал свое соединение. «Единственный способ освободить эту память — завершить процесс», — пишут исследователи Okta.

Патч доступен с июня

В первую очередь уязвимы системы с ограниченным объемом памяти. Исследователям удалось полностью вывести из строя веб-сервер Nginx с всего 1 ГБ ОЗУ с помощью атаки Hollowbyte. При 16 ГБ ОЗУ им удалось заблокировать 25 процентов памяти. Меры безопасности по ограничению входящих соединений, по-видимому, не обеспечивали эффективной защиты.

Уязвимость Hollowbyte была исправлена в версии OpenSSL 4.0.1, выпущенной 9 июня (открывается в новом окне). Теперь OpenSSL больше не доверяет данным в заголовке и увеличивает приемный буфер только по мере необходимости, когда поступают ожидаемые данные. По словам исследователей, исправление также было перенесено на версии OpenSSL 3.6.3, 3.5.7, 3.4.6 и 3.0.21.

Okta предупреждает, что помимо веб-серверов, таких как Nginx и Apache, уязвимы и многие другие программные пакеты. Например, OpenSSL также используется в популярных средах выполнения для языков программирования (например, Node.js, Python, Ruby и PHP), а также в базах данных (например, MySQL и PostgreSQL). Разработчики должны убедиться, что они оперативно переводят свои проекты на исправленную версию OpenSSL.