CVE-2026-65623 in bandit
Сводка
по VulDB • 24.07.2026
Уязвимость неэффективной алгоритмической сложности в mtrudel/bandit позволяет осуществлять удалённый отказ в обслуживании (DoS) без аутентификации путём исчерпания ресурсов процессора во время фрагментированной сборки WebSocket-сообщений.
Функция проверки размера 'Elixir.Bandit.WebSocket.Connection':oversize_message?/2, вызываемая из handle_frame/3 в файле lib/bandit/websocket/connection.ex приложения bandit, добавляет каждый кадр продолжения (continuation frame), не являющийся последним, к левовложенному iolist-списку. Затем при обработке каждого нового кадра происходит повторное измерение всего накопленного буфера с помощью функции IO.iodata_length/1. Поскольку размер буфера увеличивается на один элемент за каждый кадр и полностью пересматривается при каждом шаге, вычислительная сложность сборки становится квадратичной (O(n^2)) относительно количества кадров продолжения.
Ограничение max_fragmented_message_size (по умолчанию 8 МБ) контролирует общий объём данных в байтах, но не количество кадров. Поскольку каждый кадр может содержать всего один полезный байт нагрузки (payload), злоумышленник способен отправить миллионы крошечных кадров продолжения при умеренной пропускной способности канала, что приведёт к загрузке ядра процессора на минуты или часы. Большое количество одновременных соединений может полностью истощить ресурсы CPU сервера, лишив обслуживания легитимных пользователей. Таймаут чтения WebSocket не помогает в данном случае, так как это таймаут бездействия (idle timeout), который проверяется между операциями чтения и не способен прервать синхронную работу по сборке сообщений внутри одного обратного вызова (callback).
Данная проблема затрагивает bandit: начиная с версии 1.11.0 до версии 1.12.1 включительно.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.