Команда Erlang/OTP выпустила обновления безопасности для своих продуктов, закрывающие две уязвимости высокой степени опасности. Обе позволяют неаутентифицированному злоумышленнику вызвать отказ в обслуживании (DoS) на серверах, использующих TLS 1.3 или DTLS. Патчи доступны для версий OTP 27.3.4.14, 28.5.0.3 и 29.0.3, а также для библиотеки SSL - версий 11.7.3, 11.6.0.3 и 11.2.12.10.
Детали уязвимостей
Первая проблема, зарегистрированная как CVE-2026-55952, связана с обработкой сессионных билетов в протоколе TLS 1.3. Сервер, на котором включена поддержка session tickets (как в stateful, так и в stateless режиме), может быть нарушен одним некорректным сообщением ClientHello. Злоумышленник отправляет пакет с несовпадающими длинами PSK-идентификатора и списка связующих значений (binder). Это вызывает крах процесса-обработчика билетов. После такого сбоя новые TLS-1.3-соединения завершают рукопожатие, но при попытке выдать сессионный билет происходит повторный сбой. В результате использование TLS 1.3 становится невозможным до перезапуска затронутых слушателей или всего приложения ssl. Версия протокола TLS 1.2 при этом не страдает. Уязвимость присутствует в OTP начиная с версии 22.2.
Вторая уязвимость, CVE-2026-55950, затрагивает реализацию DTLS. В ней процесс dtls_packet_demux, отвечающий за маршрутизацию входящих UDP-датаграмм к соответствующим обработчикам соединений, использует общий сервер gen_server. Когда клиент DTLS быстро переподключается с одного и того же исходного адреса и порта (отправляя несколько сообщений ClientHello подряд), в хранилище типа gb_trees внутри демона возникает состояние гонки. Оно приводит к краху процесса demux с ошибкой {key_exists, {old, Client}}. Поскольку demux является общим для всех DTLS-ассоциаций на данном слушателе, его аварийная остановка немедленно разрывает все активные DTLS-сессии, а не только сессию атакующего. Важно, что атака происходит до этапа аутентификации: злоумышленнику достаточно отправлять UDP-датаграммы с корректными ClientHello. Для успешной эксплуатации не требуются никакие учётные данные, завершённое рукопожатие или особая конфигурация. Любой DTLS-слушатель, принимающий соединения из ненадёжных сетей, оказывается уязвим. Атакующий может повторять сброс демона неограниченное количество раз, создавая устойчивый отказ в обслуживании для всех клиентов этого слушателя. Код, вызвавший проблему, был введён в OTP 25.3.
Обе уязвимости обнаружил исследователь Лукас Бэкстрём из компании Erlang Solutions. Он ответственно раскрыл их проекту Erlang/OTP, за что ему выражена благодарность в опубликованных бюллетенях безопасности. Информация об уязвимостях была опубликована два дня назад через GitHub Security Advisories.
Эти проблемы представляют серьёзную угрозу для операторов сервисов, работающих на Erlang/OTP и использующих современные версии протоколов TLS и DTLS. Атаки могут быть выполнены удалённо, без предварительного доступа к системе. Особенно критичны они для приложений реального времени, где недоступность сервера недопустима. Поскольку обе уязвимости имеют высокий рейтинг по шкале CVSS v4 (9,3 для TLS и 10,0 для DTLS), задержка с установкой исправлений может привести к продолжительным простоям.
Разработчикам и администраторам рекомендуется как можно скорее обновить установленные версии OTP и библиотеки ssl до указанных исправленных выпусков. Если немедленное обновление невозможно, для снижения риска можно временно отключить поддержку сессионных билетов в TLS 1.3 на стороне сервера. Для DTLS эффективной временной мерой станет ограничение доступа к DTLS-слушателям из доверенных сетей или применение межсетевых экранов, фильтрующих входящие UDP-пакеты. Однако полное устранение уязвимости требует установки патчей.
Эти инциденты показывают, что даже в зрелых проектах, таких как Erlang/OTP, остаются сложные для обнаружения дефекты реализации криптографических протоколов. Регулярный аудит кода и оперативное развёртывание обновлений безопасности остаются ключевыми практиками для поддержания доступности современных интернет-сервисов.
Ссылки
- https://github.com/erlang/otp/security/advisories/GHSA-8c57-44c9-pc59
- https://github.com/erlang/otp/security/advisories/GHSA-hwfc-5hf4-gvr3