CVE: CVE-2026-84939
Продукт: Debian
Дата публикации: 10.09.2026
Критичность: CRITICAL
CVSS: 9.1 (3.1)
EPSS: 0,83%; процентиль 55,51%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В Apache FreeMarker обнаружена критическая уязвимость обхода ограничений путей (CWE-23). Злоумышленник может загрузить произвольные файлы, если приложение позволяет управлять идентификатором локали.
В Debian пакет
libfreemarker-java уязвим во всех актуальных релизах, исправление пока не выпущено. Статья описывает механику атаки, статус в Debian и временные меры защиты.Основные характеристики
Риск заключается в возможности загрузки произвольных файлов через манипуляцию идентификатором локали, что может привести к утечке конфиденциальных данных или изменению состояния системы. Уязвимость активна по умолчанию, так как локальный поиск включен в стандартной конфигурации.
- Тип ошибки: CWE-23 (Path Traversal). Нарушение логики проверки пути при загрузке шаблонов.
- CVSS 3.1: 9.1 (CRITICAL). Вектор:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. Высокая сложность эксплуатации не требуется, аутентификация не нужна.
- Условия атаки: Злоумышленник должен иметь возможность передать произвольный идентификатор локали в приложение, использующее FreeMarker.
- Эксплуатация: В каталоге CISA KEV не подтверждена. EPSS 0,83% (процентиль 55,51%) указывает на умеренную вероятность эксплуатации в ближайшие 30 дней.
Какие продукты и версии затронуты
Уязвимость затрагивает Apache FreeMarker версии от 2.2.0 до 2.3.34 включительно. В дистрибутиве Debian пакет
libfreemarker-java содержит уязвимые версии во всех поддерживаемых и тестовых ветках. Исправленная версия 2.3.35 в репозиториях Debian отсутствует.- Debian bookworm: версия 2.3.31-2, статус «open», исправление не назначено.
- Debian trixie: версия 2.3.32-2.1, статус «open», исправление не назначено.
- Debian forky: версия 2.3.32-2.1, статус «open», исправление не назначено.
- Debian sid (unstable): версия 2.3.32-2.1, статус «open», исправление не назначено.
Причина уязвимости
Причина уязвимости кроется в механизме загрузки шаблонов Apache FreeMarker. Библиотека поддерживает локализацию, позволяя загружать разные версии шаблонов для разных языковых регионов. Если в конфигурации включен локальный поиск (по умолчанию он включен), FreeMarker использует переданный идентификатор локали для формирования пути к файлу шаблона.
Проверка пути не нормализует и не валидирует идентификатор локали должным образом. Злоумышленник может передать специально сформированный «некорректный» идентификатор, содержащий последовательности символов, которые интерпретируются как переход в родительские каталоги (например,
../). Это позволяет обойти ограничения, наложенные на базовый каталог загрузки шаблонов, и обратиться к файлам за его пределами.Как работает атака
Атака эксплуатирует доверие приложения к данным, переданным пользователем, в контексте выбора локали. Приложение, использующее FreeMarker, принимает от пользователя параметр, определяющий язык или регион (например, через HTTP-заголовок
Accept-Language или параметр запроса). Этот параметр передается в FreeMarker как идентификатор локали.Если локальный поиск включен, FreeMarker пытается загрузить шаблон, имя которого зависит от локали. Злоумышленник подменяет стандартный идентификатор (например,
en-US) на строку, содержащую последовательности ../. FreeMarker интерпретирует эти последовательности как навигацию по файловой системе.В результате вместо ожидаемого шаблона загружается произвольный файл, доступный процессу приложения. Ограничения
TemplateLoader (например, FileTemplateLoader) могут сработать, но только если они настроены на строгий контроль базового каталога; в некоторых конфигурациях или при использовании других реализаций загрузчика эти ограничения могут быть обойдены.Условия успешной эксплуатации
Для успешной эксплуатации уязвимости необходимо выполнение следующих условий:
- Приложение использует Apache FreeMarker версии от 2.2.0 до 2.3.34.
- В конфигурации FreeMarker включен локальный поиск (localized lookup). По умолчанию эта опция включена.
- Злоумышленник имеет возможность контролировать значение идентификатора локали, передаваемого в FreeMarker. Это возможно, если приложение принимает данные о языке/регионе от внешнего пользователя и передает их напрямую в шаблонизатор без валидации.
- Целевой файл, который злоумышленник пытается загрузить, доступен процессу приложения (читаемые права).
Возможный сценарий атаки
Типичный сценарий атаки выглядит следующим образом. Веб-приложение на Java использует FreeMarker для рендеринга страниц. Пользователь может выбрать язык интерфейса через параметр
?lang=ru. Приложение передает это значение в FreeMarker как locale.Злоумышленник отправляет запрос с параметром
?lang=../../etc/passwd. FreeMarker, пытаясь загрузить локализированный шаблон, формирует путь, включающий ../../etc/passwd. Если TemplateLoader не блокирует выход за базовый каталог, FreeMarker загружает файл /etc/passwd как шаблон.Содержимое файла может быть выведено на страницу или использовано для выполнения кода, если шаблон содержит директивы FreeMarker. В случае использования
FileTemplateLoader с корректно настроенным baseDir, атака может быть заблокирована, но это зависит от реализации и конфигурации приложения.Есть ли публичный эксплойт
Публичные эксплойты для CVE-2026-84939 не подтверждены в каталоге CISA KEV. В открытых источниках (NVD, Apache Mailing List) отсутствуют сведения о готовых PoC или подтвержденной эксплуатации в реальных атаках.
Однако техническое описание уязвимости достаточно подробно, чтобы разработать эксплойт. EPSS 0,83% указывает на низкую, но ненулевую вероятность эксплуатации в ближайшие 30 дней. Отсутствие публичного эксплойта не означает, что уязвимость не может быть эксплуатирована; она может быть использована целевыми злоумышленниками.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для CVE-2026-84939 в официальных источниках не опубликованы. Ниже приведены неспецифичные признаки, которые могут указывать на попытку эксплуатации:
- Запросы к приложению с аномальными значениями параметров, связанных с языком или локалью (например,
?lang=../..,?locale=../../etc/passwd).
- Запросы, содержащие последовательности
../в параметрах, которые обычно содержат идентификаторы языков.
- Аномальные ответы приложения, содержащие содержимое системных файлов (например, строки из
/etc/passwdили/etc/shadow).
- Увеличение объема исходящего трафика или попытки доступа к файлам вне каталога приложения.
Как обнаружить атаку
Для обнаружения попыток эксплуатации следует анализировать логи веб-сервера и приложения. Ищите запросы, в которых параметры, связанные с локалью или языком, содержат последовательности
../ или абсолютные пути.Также полезно мониторить логи FreeMarker (если они включены) на попытки загрузки шаблонов с некорректными именами. В логах операционной системы можно отслеживать попытки доступа к файлам вне каталога приложения процессом Java. Использование WAF с правилами для детектирования path traversal в параметрах запроса может помочь в перехвате атак.
Как проверить свою версию
Для проверки версии пакета
libfreemarker-java в Debian используйте следующие команды. Замените <имя-пакета> на libfreemarker-java.
Bash:
cat /etc/debian_version
cat /etc/os-release
apt-cache policy libfreemarker-java
dpkg-query -W -f='${Package} ${Version}\n' libfreemarker-java
Если версия пакета ниже 2.3.35, система уязвима. В Debian на момент публикации статьи исправленная версия отсутствует во всех репозиториях.
Исправление
Официальное исправление для Debian еще не выпущено. Пакет
libfreemarker-java во всех релизах Debian (bookworm, trixie, forky, sid) содержит уязвимые версии. Рекомендуется следить за обновлениями в Debian Security Tracker.Временная мера — отключить локальный поиск в конфигурации FreeMarker. Это можно сделать, установив параметр
localized_lookup в false в конфигурации Configuration объекта FreeMarker. Если локализация не используется, это полностью устраняет уязвимость.После выхода исправления в Debian обновите пакет через
apt update && apt upgrade libfreemarker-java.Временные меры защиты
Пока исправление не выпущено в Debian, можно применить следующие временные меры:
- Отключите локальный поиск в FreeMarker. В коде приложения, где инициализируется
ConfigurationFreeMarker, установитеcfg.setLocalizedLookup(false). Это предотвратит использование идентификатора локали для формирования пути к шаблону.
- Ограничьте доступ к файловой системе. Убедитесь, что процесс приложения имеет минимально необходимые права на чтение файлов. Используйте
FileTemplateLoaderс четко определеннымbaseDirи убедитесь, что он настроен на строгий контроль путей.
- Валидируйте входные данные. Если приложение принимает параметр локали от пользователя, валидируйте его до передачи в FreeMarker. Разрешайте только стандартные идентификаторы (например,
en-US,ru-RU) и отклоняйте любые значения, содержащие../или абсолютные пути.
Как проверить устранение уязвимости
После применения временных мер или установки исправления проверьте, что уязвимость устранена. Для временной меры (отключение локального поиска) убедитесь, что параметр
localized_lookup установлен в false в конфигурации FreeMarker.Можно написать тестовый запрос с параметром локали, содержащим
../, и убедиться, что приложение не пытается загрузить файл вне базового каталога. Для исправления (обновление пакета) проверьте версию пакета с помощью dpkg-query -W -f='${Package} ${Version}\n' libfreemarker-java. Версия должна быть 2.3.35 или выше.Также можно проверить, что локальный поиск по-прежнему отключен, если вы его отключали вручную.
Вывод
CVE-2026-84939 представляет собой критическую уязвимость в Apache FreeMarker, позволяющую злоумышленнику загрузить произвольные файлы через манипуляцию идентификатором локали. В Debian пакет
libfreemarker-java уязвим во всех актуальных релизах, и исправление пока не выпущено.Администраторам следует немедленно отключить локальный поиск в FreeMarker или валидировать входные данные, чтобы снизить риск. После выхода официального обновления в Debian необходимо установить его как можно скорее. Мониторинг логов на аномальные запросы с параметрами локали поможет обнаружить попытки эксплуатации.
Официальные источники
История обновлений статьи
- 14.09.2026 — Опубликована первая версия материала.
