Искусственный интеллект

ИИ впервые нашел критическую уязвимость в Apache Struts раньше людей (CVE-2025-68493)

Адриан Ванс
By Адриан Ванс , Журналист
ИИ впервые нашел критическую уязвимость в Apache Struts раньше людей (CVE-2025-68493)
Image by Anonhaven

10 января 2026 проект Apache Struts выпустил бюллетень S2-069 об уязвимости CVE-2025-68493. Сама по себе история про Struts и критические баги никого не удивляет, но здесь есть новая деталь: проблему обнаружила не команда исследователей и не багхантер, а автономная система Zast AI. Это первый публичный случай, когда ИИ нашел серьезную уязвимость в настолько крупном и широко используемом проекте раньше людей.

CVE-2025-68493

Уязвимость находится в компоненте XWork, который отвечает за обработку действий и результатов внутри Struts. Корень проблемы в небезопасной работе с XML-конфигурациями: входные данные не проверяются должным образом, и это открывает дверь для инъекции внешних сущностей в XML. Если говорить проще, злоумышленник может заставить сервер прочитать то, что читать не должен, или начать делать запросы туда, куда обычному пользователю вход закрыт.

Затронуты версии Struts от 2.0.0 до 6.1.0. Оценка по CVSS 8.8, высокий уровень. Исправление вышло в версии 6.1.1.

Но самая неприятная часть этой истории не в том, что в Struts нашли очередную дыру. Самое неприятное в том, кто и что реально используют.

Мертвые версии живут в продакшене

Исследователи Sonatype посмотрели телеметрию загрузок Apache Struts из Maven Central за последнюю неделю. Цифры получились почти карикатурными, если не помнить, что за ними стоят реальные системы:

  1. За 7 дней было 387,549 загрузок пакетов org.apache.struts:*;
  2. Около 98% этих загрузок пришлись на версии, которые давно не поддерживаются;
  3. Доля безопасной версии 6.1.1 составила примерно 1.8%, это всего 6,243 загрузки;

То есть обновляются единицы. Остальные продолжают подтягивать старые ветки, которые уже не получат патчи, потому что Apache прекратил поддержку годы назад.

Самый наглядный пример это Struts 2.3. Последнее обновление у этой ветки датировано 21 сентября 2018 года. На 14 января 2026 это означает 2272 дня без единого исправления. И проблема не только в возрасте. У этой версии уже 12 известных критических уязвимостей, включая CVE-2025-68493, и исправлений для нее не будет.

Sonatype и HeroDevs приводят картину по веткам еще жестче:

ветка 2.0.x завершила жизненный цикл 21.11.2008, с тех пор прошло 6263 дня, известно 46 уязвимостей, есть критические

  • 2.1.x завершилась 24.05.2008, 6444 дня, 43 уязвимости, есть критические;
  • 2.2.x завершилась 07.04.2011, 5396 дней, 42 уязвимости, есть критические;
  • 2.3.x завершилась 21.09.2018, 2672 дня, 12 уязвимостей, есть критические;
  • 2.5.x завершилась 10.09.2023, 857 дней, 3 уязвимости, есть критические;
  • 6.0.x завершилась 01.06.2022, 1323 дня, 5 уязвимостей, есть критические;

И эти версии продолжают скачиваться и, что важнее, ставиться в рабочие системы.

Что дает CVE-2025-68493 на практике

Проблема упирается в XWork и разбор XML. Когда приложение обрабатывает конфигурацию без достаточной защиты парсера, появляется окно для классической атаки через внешние сущности XML. В результате возможны как минимум три класса последствий.

Первое это чтение локальных файлов. То есть утечка данных с сервера, которые не должны быть доступны извне.

Второе это запросы к внутренним системам. Сервер может начать обращаться к адресам внутри сети, за межсетевым экраном, и вытаскивать информацию оттуда. Такой эффект часто используется, когда нужно увидеть инфраструктуру изнутри, не имея прямого доступа.

Третье это отказ в обслуживании. Sonatype отдельно описывает сценарий, при котором специально сформированный XML может загнать обработку в бесконечный цикл и выжечь ресурсы до состояния, когда сервер падает. Они назвали это цифровым сердечным приступом для веб-сервера, и формулировка удачная: не обязательно взламывать, иногда достаточно заставить систему задыхаться.

Патч в 6.1.1 усиливает защиту парсера. По сути, все версии ниже 6.1.1 следует считать уязвимыми.

Если обновление прямо сейчас невозможно, в документации фигурируют временные меры. Например, использование собственного SAXParserFactory с отключением внешних сущностей, а также настройки JVM, которые запрещают доступ к внешним DTD, схемам и стилям:

  • -Djavax.xml.accessExternalDTD=””
  • -Djavax.xml.accessExternalSchema=””
  • -Djavax.xml.accessExternalStylesheet=””

Почему эта история хуже, чем кажется

CVE-2025-68493 не выглядит как уязвимость уровня Equifax, где была удаленная команда и масштабная компрометация. Но здесь проблема в другом. Реальный риск возникает не в момент публикации бюллетеня, а в разрыве между знанием и тем, что реально работает в продакшене. Именно так формулирует Sonatype: опасность рождается там, где информация о проблеме уже есть, а изменения в инфраструктуре не происходят.

И теперь к этому добавляется ускорение. Zast AI нашел уязвимость быстрее, чем это сделал бы человек. А значит, окно между обнаружением и эксплуатацией будет сжиматься. Sonatype задает вопрос, который звучит все более неприятно: если уязвимости находятся быстрее, чем когда-либо, успеют ли организации реагировать традиционными процессами обновлений.

На практике многие компании не успевают и раньше. Struts глубоко вшит в наследственные системы, и обновление там это месяцы регрессионных тестов, совместимость, переписывание кусков логики, согласования. Поэтому люди откладывают. А потом оказывается, что 98% загрузок уходит в мертвые ветки, и патч туда просто не придет.

Главный вывод скучный, но важный. Сама уязвимость это повод обновиться. Но настоящая проблема это живое мертвое ПО. Когда библиотека не обновлялась 2272 дня и все равно скачивается сотни тысяч раз, это уже не технический вопрос. Это управленческий долг, который однажды оплачивается инцидентом. И чем быстрее ИИ находит новые баги, тем дороже будет стоить привычка откладывать обновления.

Apache Struts CVE-2025-68493 DevSecOps Zast ai Искусственный интеллект