В Erlang/OTP обнаружено пять уязвимостей, включая критическую, затрагивающую TLS

Erlang

Разработчики Erlang/OTP выпустили обновления, закрывающие пять уязвимостей в различных компонентах платформы. Наибольшую опасность представляет проблема в реализации TLS-клиента, которая позволяет злоумышленнику полностью обойти проверку сертификатов. Ещё три проблемы - разной природы отказы в обслуживании, одна из которых потенциально ведёт к выполнению кода, а также уязвимость, позволяющая аварийно завершить работу виртуальной машины BEAM с помощью всего семи байт.

Детали уязвимостей

Первая уязвимость (CVE-2026-54890) затрагивает модуль "binary_to_term/1,2", используемый для декодирования бинарных данных во внешнем термальном формате (ETF). Исследователь Пол Гайо обнаружил, что специально сформированный ETF-пакет размером всего семь байт с тегом "BIT_BINARY_EXT" и нулевой длиной вызывает целочисленное переполнение при вычислении размера битовой строки. В результате возникает попытка выделить память объёмом около 2^64 байт, что приводит к немедленному краху всей виртуальной машины BEAM - не процесса, а всего узла. Стандартный механизм обработки ошибок Erlang, включая опцию "[safe]" для "binary_to_term/2", не способен перехватить этот сбой. Уязвимость внедрена в OTP 27.0 и затрагивает все последующие версии до выхода патча. Разработчики подчёркивают, что функция "binary_to_term" не предназначена для обработки данных из ненадёжных источников; для внешнего ввода рекомендуется использовать альтернативные форматы сериализации, такие как JSON или Protocol Buffers.

Две уязвимости, связанные с TLS/DTLS, относятся к категории отказа в обслуживании. Первая из них (CVE-2026-59251) обнаружена в библиотеке "public_key" при проверке цепочек сертификатов. Если злоумышленник отправляет цепочку, в которой каждый сертификат объявляет несколько политик сертификации, количество узлов в дереве политик растёт экспоненциально - M^K, где M - число политик на сертификат, а K - глубина цепочки. Это приводит к неограниченному потреблению памяти и загрузке процессора ещё до этапа аутентификации. По классу уязвимость аналогична CVE-2023-0464 в OpenSSL. Вторая DoS-уязвимость (CVE-2026-58227) связана с неограниченной рекурсией при обработке перекрёстно подписанных сертификатов. Если прислать два сертификата, где каждый выпущен другим (A подписывает B, B подписывает A), и в неправильном порядке, код проверки цепочки входит в бесконечную рекурсию без контроля глубины. Стек вызовов и аккумулятор цепочки растут до исчерпания памяти, вызывая крах узла. Для атаки требуется только TCP-соединение и частичное рукопожатие - ни аутентификация, ни завершённое рукопожатие не нужны. Обе уязвимости затрагивают OTP начиная с версии 23.2 для рекурсии и с 26.2 для экспоненциального роста политик.

Уязвимость (CVE-2026-59250) в реализации текстового кодека H.248/Megaco с опцией "flex" представляет собой классическое переполнение буфера в низкоуровневом C-драйвере. Отправка одного сообщения H.248, содержащего имя свойства длиннее 452 байт, вызывает переполнение буфера в парсере, работающем до проверки аутентификации на уровне протокола Megaco. В OTP 28.0+, где включён "FORTIFY_SOURCE", это приводит к аварийному завершению процесса. На более старых версиях (OTP 27.0 и ранее) переполнение может позволить выполнение произвольного кода, если операционная система не предоставляет защиту. Для атаки злоумышленнику достаточно иметь доступ к транспортному порту Megaco. Разработчики рекомендуют в качестве обходного пути использовать Erlang-сканер вместо flex-сканера, хотя это снижает производительность.

Наиболее опасная уязвимость (CVE-2026-55953) получила статус критической (CVSS 10.0). Она затрагивает TLS/DTLS-клиент для версий до TLS 1.3. При установлении соединения клиент не проверяет, что выбранный сервером набор шифров был предложен клиентом в "ClientHello". Злоумышленник, действующий как "человек посередине", может выбрать анонимный набор шифров (например, "ECDH_anon"), который не требует от сервера предъявления сертификата. В результате клиент, настроенный на проверку сертификата ("verify_peer"), устанавливает соединение, считая его аутентифицированным, хотя на деле сервер не предоставил никаких доверенных удостоверяющих документов. Все данные, передаваемые по такому соединению, могут быть прочитаны и изменены атакующим. TLS 1.3 не подвержен этой проблеме, так как в нём имеется отдельная проверка соответствия набора шифров. Уязвимость присутствует во всех версиях OTP начиная с 17.0 и до выхода патча.

Исправления выпущены для версий 27.3.4.15, 28.5.0.4 и 29.0.4. Пользователям OTP настоятельно рекомендуется обновить установки до патченных версий. Для защиты от уязвимости в TLS-клиенте - временно использовать только TLS 1.3. Для уязвимости в "megaco" - ограничить доступ к транспортному порту межсетевым экраном или переключиться на Erlang-сканер. Уязвимость в "binary_to_term" не имеет полного обходного решения: единственная надёжная мера - не обрабатывать данные из ненадёжных источников этой функцией.

Ссылки

Комментарии: 0