Представьте: приложение на Spring Boot с Thymeleaf работает стабильно. И вдруг через обычную форму ввода злоумышленник передаёт специально сформированную строку, которая может инициировать запись файлов на сервер.
Это не гипотетическая угроза.
Речь об уязвимости CVE-2026-40478.
По данным открытых источников, в одном из российских финансовых учреждений был зафиксирован инцидент, связанный с шаблоном подтверждения email. Злоумышленник использовал непечатный символ (табуляцию) вместо пробела, что позволило обойти механизмы песочницы. В ряде подобных случаев это может привести к загрузке вредоносного кода и получению удалённого доступа. Разберём, как работает этот вектор атаки, почему он актуален для значительной части компаний на Spring, и какие шаги помогут снизить риски.
Современные фреймворки создают иллюзию безопасности «из коробки».
Разработчик включает песочницу в Thymeleaf — и полагает, что приложение защищено. Однако, как показывает практика, отдельные непечатные символы могут обходить предусмотренные проверки. Это напоминает ситуацию, когда замок закрыт, но определённое воздействие позволяет его открыть.
Опишем суть.
Уязвимость CVE-2026-40478 (по классификации CVSS — уровень 9.1, что соответствует критическому) затрагивает Thymeleaf версии 3.1.3 и ниже. Эта библиотека широко используется со Spring Boot для рендеринга HTML, писем, PDF-документов. Проблема связана с механизмом обработки выражений: встроенная защита блокирует создание произвольных объектов через ключевое слово new, но при этом не учитывает некоторые пробельные символы (например, табуляцию). Вместо new java.io.FileWriter может быть использована конструкция с табуляцией, и проверка не срабатывает. В результате потенциально открывается доступ к файловой системе, а при определённых условиях — возможность удалённого выполнения кода (RCE).
Особенность таких уязвимостей в том, что они сложно выявляются статическими анализаторами и код-ревью. Один неочевидный символ — и защита нейтрализуется.
Как может выглядеть атака на CVE-2026-40478 — реальный сценарий (на основе анализа открытых данных)
Предположим, существует форма обратной связи. Пользователь вводит имя, email, сообщение, и эти данные передаются в шаблон Thymeleaf для генерации письма менеджеру. Злоумышленник в поле «сообщение» вставляет не обычный текст, а специально сконструированное выражение, которое включает табуляцию вместо пробела после new.
Парсер Thymeleaf воспринимает это как разрешённую конструкцию, после чего срабатывает Spring SpEL, и создаётся объект для работы с файловой системой. Это позволяет записать файл на сервер. При наличии в classpath определённых классов (а в Spring их множество) можно загрузить и выполнить произвольный байт-код, что делает RCE реальностью.
В практике компаний, оказывающих услуги в области ИБ, встречались случаи, когда через аналогичную уязвимость злоумышленники пытались записать исполняемый файл в папку веб-приложения. Своевременное срабатывание систем мониторинга файловой активности помогало предотвратить развитие атаки.
Потенциальные векторы входа:
- любые пользовательские строки, которые попадают в Thymeleaf-выражения (например, th:text, th:utext, динамические имена шаблонов);
- параметры URL, заголовки, cookie, если они используются в шаблонах;
- данные из БД, которые могли быть модифицированы через SQL-инъекции или инсайдером.
Наиболее опасно, когда разработчики не подозревают, что пользовательские данные влияют на выражение — например, в кастомных директивах или при логировании ошибок.
Почему связка Thymeleaf и Spring Boot привлекает внимание злоумышленников
Thymeleaf является фактическим стандартом шаблонизации в Spring Boot. По статистике, значительная доля корпоративных Java-приложений в России используют эту связку. Это делает уязвимости в таких компонентах особенно привлекательными для массового сканирования.
Что может дать успешная эксплуатация CVE-2026-40478 злоумышленнику:
- запись произвольных файлов на сервер (в том числе веб-шеллы, скрипты майнеров, бэкдоры);
- чтение конфигурационных файлов (например, с данными подключения к БД);
- при определённых условиях — выполнение команд операционной системы через цепочку классов;
- латеральное перемещение по внутренней сети, особенно если сервер находится в DMZ.
Хорошая новость: уязвимость закрывается относительно простыми методами. В версии Thymeleaf 3.1.4 и выше реализована нормализация пробельных символов и расширен список запрещённых классов.
10 правил, как снизить риски, связанные с CVE-2026-40478 и подобными угрозами
Ниже приведён практический чек-лист, основанный на опыте реальных проектов в различных секторах.
- Обновите Thymeleaf до версии 3.1.4 или новее
Версия 3.1.4 содержит патч: нормализация табуляции и других пробельных символов перед проверкой new. После обновления рекомендуется прогнать регрессионные тесты — изменение парсера может повлиять на старые шаблоны. - Настройте валидацию всех входных данных перед передачей в Thymeleaf
Используйте регулярные выражения для запрета непечатных символов (табуляция, перевод строки, возврат каретки, неразрывные пробелы и т.д.). Учитывайте, что пробельные символы в Unicode бывают разными. - Проведите аудит всех шаблонов, где используется пользовательский ввод
Особое внимание уделите конструкциям th:inline="text", th:utext, динамической генерации имён шаблонов. Даже один такой шаблон может создать риск. - Внедрите регулярное сканирование зависимостей (dependency scanning)
Раз в неделю проверяйте обновления библиотек. Используйте SCA-инструменты (OWASP Dependency-Check, Snyk). Автоматизация в CI/CD помогает не пропустить критические уязвимости. - Добавьте в CI/CD проверку на уязвимые версии
Например, с помощью плагина OWASP Dependency Check. Это не позволит попасть в прод с версией Thymeleaf ниже 3.1.4. - Настройте мониторинг аномальной файловой активности
Любое создание исполняемых файлов (JSP, JAR, shell-скриптов) в нестандартных местах должно быть триггером для SOC. Используйте Osquery или EDR-решения. - Ограничьте права на запись для приложения
Приложение должно иметь возможность записи только в определённые директории (например, /tmp, логи). Лучше запускать контейнеры с read-only root. - Обучите разработчиков безопасной работе с шаблонизаторами
Демонстрация работающего эксплойта на тестовом стенде — эффективный способ показать реальность угрозы. - Регулярно проводите пентесты с моделированием действий реального противника
Автоматические сканеры не всегда находят логические уязвимости в шаблонах. Важен ручной анализ с попыткой обхода защиты. - Внедрите политику обновления библиотек и контролируйте её соблюдение
Особенно это касается компонентов, обрабатывающих пользовательский ввод.
Типичные ошибки, которые сохраняют риски даже после патча
Ошибка 1: Игнорирование иных пробельных символов, кроме табуляции
В Unicode существуют символы, которые могут быть использованы для обхода. Чёрный список должен быть полным, и простая проверка на \s в Java не всегда достаточна.
Ошибка 2: Излишнее доверие к чёрному списку только стандартных классов
В чёрный список Thymeleaf были включены java.lang.Runtime, java.lang.ProcessBuilder. Однако злоумышленники могут использовать классы из самого Spring (например, org.springframework.expression.Expression или org.springframework.core.io.FileSystemResource), чтобы добиться RCE в обход запретов.
Ошибка 3: Отсутствие мониторинга логов после устранения уязвимости
Даже после обновления необходимо отслеживать попытки эксплуатации старой версии в отдельных микросервисах. В практике встречались случаи, когда один сервис оставался необновлённым, и злоумышленники сканировали эндпоинты в течение нескольких дней — признаки таких попыток (например, наличие new\t в параметрах) можно заметить по логам.
Как CVE-2026-40478 влияет на бизнес и соответствие требованиям (152-ФЗ, 187-ФЗ)
Для компаний, работающих в России, особенно в сфере КИИ, финансовом и госсекторе, последствия могут быть значительными. Утечка персональных данных вследствие такой уязвимости может рассматриваться как нарушение требований 152-ФЗ. По данным открытых источников, штрафы для юридических лиц по ст. 13.11 КоАП могут достигать 500 тыс. руб., а при повторном нарушении — до 1,5 млн руб. Кроме того, существует риск привлечения к ответственности по ст. 272 УК РФ (неправомерный доступ к компьютерной информации), если будет установлено, что меры безопасности были недостаточными.
В отношении 187-ФЗ (обязанности для операторов КИИ) несвоевременное обновление критической уязвимости может повлечь предписания контролирующих органов. В практике аудитов были случаи, когда инспекторы ФСТЭК обращали внимание на использование устаревших версий библиотек с известными CVE.
Таким образом, CVE-2026-40478 — это не только технический долг, но и риск для бизнеса и ответственность руководителей ИБ.
Пошаговый план действий (без остановки продуктивов)
- Составьте инвентаризацию всех сервисов на Spring Boot с Thymeleaf (например, с помощью поиска по jar-файлам).
- Обновите Thymeleaf до 3.1.4 в среде разработки, прогоните тесты.
- Разверните патч на стейджинге, проверьте шаблоны с реальными данными.
- Выкатите на продуктив в окно наименьшей нагрузки.
- Включите валидацию входных данных на уровне контроллеров (через @Pattern или собственный фильтр).
- Настройте алерты на появление в логах подозрительных паттернов (например, new\t, FileOutputStream, Runtime).
- Проведите повторное сканирование зависимостей — убедитесь, что нет старых транзитивных версий.
- Если быстрое обновление невозможно (например, из-за падающих тестов), рассмотрите временное отключение динамических выражений в Thymeleaf через templateEngine.setEnableSpringELCompiler(false). Однако это снизит функциональность, поэтому лучше не затягивать с полноценным обновлением.
Вопросы и ответы (на основе частых запросов от разработчиков и руководителей)
- Правда ли, что CVE-2026-40478 затрагивает только Thymeleaf 3.1.3 и ниже?
Да. Версия 3.1.4 и выше защищены. Однако стоит проверить, не используются ли старые патчи или кастомные форки. - Может ли WAF защитить от атаки без обновления?
Частично. Если WAF умеет блокировать последовательности типа new\t или new\s+FileOutputStream — да. Но злоумышленник может использовать кодирование (например, %09) или другие Unicode-символы. Полагаться только на WAF не рекомендуется. - Какая ответственность для ИТ-директора при эксплуатации уязвимости?
По 152-ФЗ — административная. По 187-ФЗ для КИИ — вплоть до дисквалификации. В реальной практике были случаи наложения штрафов на должностных лиц за несвоевременное обновление библиотек с известными CVE. - Как проверить, не была ли уязвимость уже использована в моей инфраструктуре?
Ищите в логах приложений вызовы FileOutputStream, FileWriter, Runtime.exec с необычными параметрами. Анализируйте созданные файлы в /tmp, /var/tmp и директориях приложения. EDR-системы помогают выявить такие следы. - Чем опасна эта уязвимость для компаний, использующих аутсорсинговую разработку?
Аутсорсер может применять устаревший стек. Рекомендуется включать в договор требования о своевременном обновлении библиотек и право на аудит безопасности кода. - Что делать, если Thymeleaf используется в legacy-проекте на Java 8?
Обновление до версии 3.1.4 поддерживает Java 8. Для очень старых проектов можно рассмотреть изоляцию через контейнер с ограничениями файловой системы. - Можно ли автоматизировать поиск CVE-2026-40478 в коде?
Да, с помощью Semgrep или CodeQL можно создать правило на поиск конструкций, которые могут привести к обходу. Примеры таких правил публикуются в открытых источниках. - Что делать при обнаружении следов эксплуатации?
Немедленно изолировать сервер, сделать дамп памяти и логов, вызвать команду реагирования (CSIRT). Услуги Incident Response помогают выявить масштаб и остановить атаку.
Заключение: не паниковать, но действовать
Уязвимость CVE-2026-40478 серьёзна, но управляема. Главное — не откладывать её устранение. Наличие чёткого плана (например, изложенные выше правила) позволяет большинству компаний закрыть такие дыры за несколько дней. Безопасность — это не одноразовое обновление, а культура. Каждый раз, сталкиваясь с новой CVE, полезно задавать вопрос: «Как неочевидный символ или обходной путь может нейтрализовать нашу защиту?» Такой подход помогает предотвращать многие инциденты.
Если вам важно оценить уровень защищённости ваших приложений, провести аудит, внедрить системы мониторинга (EDR/XDR) или привести инфраструктуру к требованиям ФСТЭК и 152-ФЗ, можно обратиться за консультацией к профильным специалистам. Они помогут проанализировать инфраструктуру, выявить слабые места и построить дорожную карту повышения безопасности.
Берегите свои приложения. И пусть ваш код будет безопасным.
⚖️ Данный материал носит информационно-аналитический характер. Все выводы основаны на открытых источниках и не являются утверждением фактов, не подтверждённых официально. Материал не является юридической или технической рекомендацией. Любые решения принимаются читателем самостоятельно.
══════
Больше материалов: Центр знаний SecureDefence.
Оставьте заявку на бесплатную консультацию: [Перейти на сайт]