Apache MINA: уязвимость неограниченного раздувания при распаковке Zlib.inflate (CVE-2026-47321)
В Apache MINA обнаружена уязвимость высокого уровня опасности (CVSS 7.5), связанная с неограниченной распаковкой данных в классе CompressionFilter. Атакующий может отправить специально сжатые данные с чрезвычайно высоким коэффициентом сжатия, что приведёт к исчерпанию памяти приложения. Уязвимость затрагивает все приложения, использующие Apache MINA с включённой фильтрацией сжатия.
Подробности
Уязвимость затрагивает класс CompressionFilter, который использует ZLib для сжатия и распаковки передаваемых данных. При распаковке входящих данных фильтр не контролирует итоговый размер и создаёт буфер независимо от объёма результата. Некоторые сжатые данные могут иметь коэффициент сжатия более 1000, что приводит к исчерпанию памяти приложения, поскольку размер распакованных данных не ограничивается. Проблеме присвоен уровень опасности CVSS 7.5 (HIGH). Уязвимость затрагивает продукты Apache Software Foundation Apache MINA. Эксплуатация не требует аутентификации и может быть выполнена удалённо путём отправки специально подготовленных сжатых данных. Исправление добавляет контроль над размером распакованных данных. Разработчик приложения может задать фиксированный лимит, при достижении которого выбрасывается исключение. Также появилась возможность указать максимально допустимый коэффициент сжатия, что защищает от ситуации, когда небольшой сжатый файл разворачивается в гигантский. При этом предусмотрен порог для итогового размера (1 МБ), чтобы избежать ложных срабатываний — например, когда очень маленький файл имеет высокий коэффициент сжатия, но итоговый размер остаётся приемлемым (несколько тысяч байт).Что делать
Разработчикам, использующим Apache MINA, настоятельно рекомендуется обновиться до версии, содержащей исправление, и настроить экземпляр CompressionFilter. При создании фильтра следует передать максимальный лимит распакованного размера в качестве четвёртого параметра конструктора — maxDecompressedSize: public CompressionFilter(final boolean compressInbound, final boolean compressOutbound, final int compressionLevel, final int maxDecompressedSize) Дополнительно можно указать пятый параметр maxDecompressRatio и шестой параметр decompressRatioMinSize, чтобы разрешить небольшие распакованные файлы с высоким коэффициентом сжатия: public CompressionFilter(final boolean compressInbound, final boolean compressOutbound, final int compressionLevel, final int maxDecompressedSize, final long maxDecompressRatio, final long decompressRatioMinSize) Также добавлен fluent API, избавляющий от необходимости вызывать конструктор с большим числом параметров: CompressionFilter compressionFilter = new CompressionFilter() .setCompressionLevel(Zlib.COMPRESSION_MAX) .setMaxDecompressedSize(1_000_000) .setMaxDecompressRatio(100) .setDecompressRatioMinSize(100_000); Если обновление невозможно, следует ограничить доступ к сервису на сетевом уровне и по возможности отключить фильтрацию сжатия для недоверенных источников. Итог: CVE-2026-47321 — серьёзная уязвимость отказа в обслуживании в Apache MINA, эксплуатация которой приводит к исчерпанию памяти. Единственный надёжный способ защиты — обновление библиотеки и явная настройка лимитов в CompressionFilter.Источник: CVE Project (cvelistV5)
