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

Эксперты объясняют, что проблема связана с обработкой TLS-хендшейков. Каждое сообщение начинается с четырехбайтового заголовка, три байта которого указывают размер последующих данных хендшейка. Однако уязвимые версии OpenSSL сразу увеличивали буфер до заявленного размера до того, как получали данные и проверяли их фактический объем.

В результате атакующий может открыть TLS-соединение и отправить короткий пакет с заголовком, который обещает крупный ClientHello. Сервер выделяет память, после чего рабочий поток зависает в ожидании данных. Ни аутентификация, ни создание сессии, ни обмен ключами для этого не требуются.

Исследователи пишут, что в целом такое поведение напоминает классические атаки на исчерпание соединений (connection-exhaustion attack), однако проблема HollowByte более опасна в системах с glibc. Дело в том, что после закрытия соединения OpenSSL освобождает буфер, но аллокатор не возвращает небольшие и средние блоки операционной системе, а сохраняет их для повторного использования. В результате, если атакующий постоянно меняет заявленный размер сообщений, освободившиеся блоки не удается использовать повторно. Хип фрагментируется, из-за чего процесс занимает все больше памяти, которая не освобождается даже после завершения атаки.

Во время тестов на NGINX исследователи вывели из строя сервер с 1 Гбайт памяти: из-за фрагментации хип накопил 547 Мбайт неиспользуемых блоков, и системе пришлось принудительно завершить процесс из-за нехватки памяти. На сервере с 16 Гбайт HollowByte занял около четверти всего объема памяти, причем количество соединений так и не достигло установленного лимита.

Исправление для этой проблемы вышло еще 9 июня 2026 года и вошло в состав OpenSSL 4.0.1, 3.6.3, 3.5.7, 3.4.6 и 3.0.21.

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

Отмечается, что из-за этого автоматические сканеры не смогут обнаружить проблему по CVE. Также сложности возникнут и у пользователей дистрибутивов, в которых исправления добавляют в старые версии OpenSSL без изменения номера релиза: администраторам придется проверять changelog пакета или выяснять у мейнтейнеров, вошли ли в сборку изменения из пулл-реквестов 30792, 30793 или 30794.

Разработчик OpenSSL Александр Недведицки сообщил изданию The Hacker News, что HollowByte скорее является проблемой конфигурации сервера, работающего в блокирующем режиме без лимитов, а не уязвимостью протокола. Он рассказал, что анализировал проблему в OpenBSD, где glibc не используется, и отметил, что не учитывал особенности ее аллокатора. Также он признал, что не уверен, что новый механизм с realloc полностью решает проблему с glibc.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии