Разработчики Thymeleaf устранили брешь, позволявшую тайно записывать файлы в систему.

Согласно отчету Endor Labs, один незаметный символ табуляции оказался достаточным, чтобы обойти защиту популярного шаблонизатора Thymeleaf и запустить произвольный код на сервере. Уязвимость получила идентификатор CVE-2026-40478 и оценку 9.1 балла по шкале CVSS.
Проблема затрагивает версии Thymeleaf 3.1.3 и ниже, которые широко используют вместе с фреймворком Spring. В таком сочетании движок по умолчанию отвечает за обработку шаблонов во множестве корпоративных приложений. При удачной атаке злоумышленник может записывать файлы на сервер и в ряде случаев добиться удалённого выполнения кода.
Суть ошибки сводится к тому, что встроенные механизмы защиты проверяли выражения недостаточно строго. Разработчики пытались отсеивать опасные конструкции, в частности те, что создают объекты через ключевое слово new, но ориентировались только на обычный пробел. Парсер же спокойно воспринимает и другие пробельные символы, включая табуляцию. Вставив такой символ, атакующий мог обойти проверку и выполнить выражение, что относится к классам уязвимостей вроде CWE-917 и CWE-1336.
Вторая проблема связана со списком запрещённых классов. Thymeleaf блокировал в основном стандартные пакеты Java, но не ограничивал классы из Spring и других библиотек. В результате злоумышленник мог создать объект, который работает с файловой системой, и использовать его для записи файлов на диск.
Для атаки не нужно иметь доступ к серверу или изменять шаблоны. Достаточно контролировать входные данные, которые приложение передаёт в шаблонизатор. Такой сценарий встречается довольно часто – например, когда приложение формирует динамические представления или обрабатывает пользовательские строки внутри выражений.
Специалисты показали простой пример: с помощью подмены пробела на символ табуляции в выражении удаётся создать объект, который открывает поток записи в файл. Как только файл открывается, он уже появляется на диске, даже без дополнительных действий. При наличии подходящих классов в окружении атакующий может пойти дальше и добиться выполнения команд.
Разработчики закрыли уязвимость в версии 3.1.4. В обновлении нормализуют все пробельные символы перед проверкой, расширяют список запрещённых классов и строже обрабатывают выражения. При этом защита по-прежнему основана на списке запретов, а не на строгом разрешительном подходе, поэтому полностью риск не исчезает.
Исправление уже доступно, обходных решений нет. Всем пользователям рекомендуют срочно обновить Thymeleaf и связанные модули. Параллельно стоит проверить код приложений и исключить ситуации, когда пользовательский ввод напрямую влияет на выражения, имена шаблонов или фрагментов.
Уязвимость ещё раз показывает, что шаблонизаторы фактически выполняют код, а не просто подставляют данные. Передавать непроверенный ввод в такие механизмы опасно – это может привести к серьёзным последствиям.