CVE-2026-82617: ReDoS и переполнение стека в Apache OpenNLP
В Apache OpenNLP — популярной библиотеке обработки естественного языка — выявлена уязвимость CVE-2026-82617, позволяющая атакующему вызвать отказ в обслуживании приложения. Проблема затрагивает два встроенных шаблона поиска именованных сущностей: DEFAULT_REGEX_NAME_FINDER.EMAIL и DEFAULT_REGEX_NAME_FINDER.URL, предоставляемых классом opennlp.tools.namefind.RegexNameFinderFactory.
Подробности
Оба регулярных выражения содержат неоднозначные вложенные квантификаторы, что делает их уязвимыми к атаке типа ReDoS (Regular Expression Denial of Service). Уязвимость проявляется, когда приложение получает finder через RegexNameFinderFactory.getDefaultRegexNameFinders(...) и применяет его к недоверенному тексту через RegexNameFinder.find(String[]) или RegexNameFinder.find(String).
Механика атаки различается для двух шаблонов:
- EMAIL. Длинная последовательность символов локальной части адреса, за которой так и не следует символ
@, заставляет движок повторно сканировать строку до конца ввода с каждой стартовой позиции. Стоимость обработки растёт квадратично: вход размером около 32 КБ занимает несколько секунд CPU в рамках одного вызоваfind(), при этом совпадений не находится. Каждое удвоение входных данных увеличивает затраты примерно вчетверо. - URL. Подвыражение строки запроса содержит захватывающий повтор внутри внешнего повтора. JDK-матчер выполняет рекурсию на каждом токене запроса, поэтому вход примерно на 4 КБ с множеством токенов, разделённых символом
&, исчерпывает стек потока и приводит кjava.lang.StackOverflowError, который распространяется изfind()и завершает вызывающий поток. На потоках с уменьшенным стеком (например,-Xss512k, что типично для серверных пулов воркеров) достаточно около 1 КБ.
В обоих случаях атакующему достаточно передать текст на анализ, чтобы превратить один запрос в секунды или минуты загруженного CPU либо в резкое завершение потока. Ни аутентификация, ни особая конфигурация, ни файлы моделей не требуются — достаточно, чтобы приложение использовало один из двух встроенных finder-ов. Уязвимость получила максимальную оценку CVSS 10.0 (CRITICAL).
Затронуты версии Apache OpenNLP: с 2.0.0 по 2.5.11, а также с 3.0.0-M1 по 3.0.0-M5.
Что делать
Разработчикам рекомендуется обновить библиотеку до версии 2.5.12 либо до 3.0.0-M6 для тех, кто отслеживает линию 3.0.0. В этих версиях уязвимость устранена.
Если обновление невозможно в кратчайшие сроки, следует рассмотреть временные меры:
- исключить использование встроенных finder-ов EMAIL и URL из
RegexNameFinderFactoryдля недоверенного ввода; - применять собственные регулярные выражения, свободные от неоднозначных вложенных квантификаторов;
- ограничить длину входного текста, передаваемого на анализ, и установить таймауты обработки;
- в крайних случаях — увеличить размер стека потоков (
-Xss), хотя это лишь частично снижает риск и не устраняет первопричину.
Уязвимость CVE-2026-82617 представляет серьёзную угрозу для сервисов, обрабатывающих пользовательский текст с помощью Apache OpenNLP: единственный небольшой запрос способен заблокировать рабочий поток или обрушить его. Наиболее надёжное решение — обновление до исправленных версий 2.5.12 или 3.0.0-M6.
Источник: CVE Project (cvelistV5)
