Критический· CVSS 9.8CVEНужна ручная проверкаИзвестные уязвимости продуктовВсе материалы о Apache Struts

Apache Struts: выполнение кода через старый REST-маппер (CVE-2026-104711)

Java-сайт на старом REST-маппере Struts мог выполнить код из запроса. Обновитесь минимум до 6.12.0 или 7.4.0. Обычный маппер, restful2 и REST-плагин бюллетень не затрагивает.

Коротко о главном

Чем опасно
Специально составленный запрос мог выполнить код на сервере
С чего начать защиту
На линии 6 обновитесь до 6.12.0 или новее. На линии 7 — до 7.4.0 или новее.
Как подтвердить
Нужны ручной аудит и проверка реализации. Отсутствие находок во внешнем скане не подтверждает безопасность.
Посмотреть условия проверки
В этой статье
  1. Что произошло
  2. Кого это касается
  3. Как проверить установленную версию
  4. Как снизить риск
Продукт
Apache Struts
Оценка риска
CVSS 9.8 / 10

Как проверить и что учитывать

Нужна ручная проверка

Снаружи обычно не видно, что сайт написан на Struts и какой включён маппер. FindRisk не подтверждает CVE-2026-104711. Это проверка конфигурации приложения. Не делайте вывод о наличии уязвимости только по одному внешнему признаку: подтвердите результат в настройках и версии компонента.

Что нужно для подтверждения

Дефект требует устаревший RESTful action mapper.

Ограничения вывода

  • Приложение на Spring и другой Java-сайт без Struts сюда не относятся.
  • Записи KEV нет.

Что произошло

Старый REST-маппер Struts принимал выражение OGNL из запроса. При выключенной защите это вело к выполнению кода.

Бюллетень S2-075 прямо исключает обычный маппер, restful2 и REST-плагин. Вопрос владельца простой: какой маппер включён и какая версия стоит.

Кого это касается

Затронуты Struts 2.0.0–2.3.37, 2.5.0–2.5.33, 6.0.0–6.11.0 и Struts 7.0.0–7.3.0 только при выключенном OGNL allowlist. Первые две линейки помечены как снятые с поддержки.

Класс CWE-917 совпадает с текстом бюллетеня про внедрение выражения. KEV нет. Это не соседний дефект гонки в CVE-2026-104714.

Версии по бюллетеню Apache Struts S2-075
ЛинияУсловиеЧто делать
2.0–2.3 и 2.5Старый REST-маппер, линии снятыПерейти на поддерживаемую линию
6.0.0–6.11.0Старый REST-маппер6.12.0
7.0.0–7.3.0Выключен OGNL allowlist7.4.0

Как проверить установленную версию

Версию берите из зависимости проекта и из собранного приложения. Публичная страница её не показывает.

Фрагмент, по которому в своём проекте ищут зависимость. Номер версии смотрите рядом с ней.
<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-core</artifactId>
</dependency>

Как снизить риск

Обновите линию 6 или 7 и отключите старый маппер. Для снятых с поддержки линий патча нет: их заменяют.

Внешняя проверка домена не определяет маппер Struts и не заменяет просмотр конфигурации.

Что может произойти

  • Специально составленный запрос мог выполнить код на сервере
  • Ветки 2.0, 2.3 и 2.5 уже сняты с поддержки, для них отдельного патча нет
  • Struts 7 в настройке по умолчанию, где список OGNL включён, бюллетень не считает затронутым

Как защититься

  1. 1На линии 6 обновитесь до 6.12.0 или новее. На линии 7 — до 7.4.0 или новее.
  2. 2Уйдите со старого RESTful action mapper на обычный маппер, restful2 или REST-плагин. Одного переключателя мало для веток без патча: их нужно заменить.
  3. 3На Struts 7 не выключайте OGNL allowlist.

Как проходит проверка

Снаружи обычно не видно, что сайт написан на Struts и какой включён маппер. FindRisk не подтверждает CVE-2026-104711. Это проверка конфигурации приложения. Автоматический результат показывает внешний признак риска и требует проверки специалистом с учётом конкретной конфигурации.

Проверить другие внешние риски

Что делать после обнаружения

  • Найдите в конфигурации имя маппера и версию Struts до изменений.
  • Если старый маппер был включён на публичном сайте, проверьте журналы приложения и новые учётные записи на сервере.
  • Обновите все узлы, а не только балансировщик.

Частые вопросы

Что означает риск «Struts: выполнение кода через старый REST»?

Java-сайт на старом REST-маппере Struts мог выполнить код из запроса. Обновитесь минимум до 6.12.0 или 7.4.0. Обычный маппер, restful2 и REST-плагин бюллетень не затрагивает.

Можно ли подтвердить проблему только внешней проверкой?

Снаружи обычно не видно, что сайт написан на Struts и какой включён маппер. FindRisk не подтверждает CVE-2026-104711. Это проверка конфигурации приложения. Итог нужно сопоставить с конфигурацией, версиями и правами доступа на вашем сайте.

Что сделать в первую очередь?

На линии 6 обновитесь до 6.12.0 или новее. На линии 7 — до 7.4.0 или новее.

Источники

Больше материалов о рисках и защите сайтов — в каталоге уязвимостей.