4 октября 2026 года зафиксирована попытка эксплуатации уязвимости в плагине WPC Product Bundles для WooCommerce. Уже на следующий день тот же вредоносный код доставлялся через уязвимость в другом популярном расширении - Ninja Forms. Оба случая объединяет общий второй этап атаки. Он выполняется в браузере администратора, который уже вошёл в систему управления сайтом. Сервер напрямую никто не взламывает: злоумышленник пользуется правами, полученными законным владельцем.
Описание
Первый плагин отвечает за сборку товарных наборов и работает более чем на 30 тысячах сайтов. Уязвимость с идентификатором CVE-2026-93836 позволяет отправить в составе заказа значение, которое начинается с числа и потому проходит проверку, но несёт в себе дополнительную разметку. Позже эта разметка отображается на служебной странице и запускает чужой код. Исправление вошло в версию 8.6.7. Второй случай касается Ninja Forms - конструктора форм, установленного более чем на 500 тысячах сайтов. Здесь злоумышленник отправлял обычную заявку через форму, заполняя текстовые поля так, чтобы при открытии заявки в панели управления срабатывал сценарий. Уязвимость CVE-2026-94504 закрыта в версии 3.15.4.
Сценарий, который аналитики Patchstack извлекли с заражённых сайтов, не проводит проверку уязвимостей и не служит пробным образцом. Это инструмент закрепления в системе. Пароль и сессионный идентификатор ему не нужны. Код работает на том же домене, что и сама система управления, поэтому браузер автоматически прикладывает к его запросам действующую сессию администратора. Сценарий открывает служебные страницы, считывает маркеры защиты от подделки запросов и повторяет их в собственных обращениях.
Дальше начинается основная часть. Под видом безобидного расширения для кэширования миниатюр устанавливается чужой плагин. При обычной работе он ничего не делает и срабатывает только при прямом обращении к нему. Внутри спрятан файловый менеджер без какой-либо проверки прав. Любой, кто знает адрес, получает доступ к файлам сайта: их можно просматривать, загружать и изменять. Отдельный компонент создаёт новую учётную запись администратора. Имя выбирается случайно из набора служебных слов вроде support, backup или maintenance, а почтовый адрес выглядит как корпоративный ящик разработчика.
Главная особенность этой части - скрытность. Специальный обязательный плагин исключает новую запись из списка пользователей, из фильтра по роли и из счётчиков над таблицей. Владелец сайта видит привычную картину: единственный администратор - он сам. Обязательные плагины загружаются при каждом обращении и не отображаются на странице управления расширениями. Удаление вредоносного плагина их не затрагивает.
Кроме того, установщик создаёт секретную ссылку для входа. Она привязана не к скрытой учётной записи, а к самому старому администратору сайта. Держатель ссылки незаметно входит под этим аккаунтом, и журналы фиксируют обычный сеанс. Служебные файлы злоумышленники намеренно состаривают: они определяют самую раннюю дату изменения в файловой системе и проставляют её новым файлам. Поиск недавно изменённых файлов ничего не покажет. В результате одна успешная атака оставляет четыре независимых способа вернуться на сайт, и лишь один из них заметен в панели управления.
Хранимый межсайтовый скриптинг удобен для атакующих тем, что не требует действий жертвы. При отражённом варианте человека нужно заманить на поддельную страницу. Здесь чужой код уже лежит в данных, которые администратор открывает по работе: в заказе интернет-магазина или в отправленной заявке. Достаточно одного просмотра. Поэтому конкретное расширение почти не имеет значения. Как только сценарий получает доступ к административной среде, дальнейшие шаги одинаковы для любой уязвимости.
Домен, с которого раздавались все этапы атаки, зарегистрирован 1 октября 2026 года, а через два дня уже использовался. Обе уязвимости раскрыли 22 сентября. Источники обращений различаются: четыре адреса из пяти оказались выходными узлами Tor, которые и раньше блокировали при других атаках. Пятый отмечен за рассылку спама и атаки полным перебором паролей. Блокировка отдельных адресов здесь мало помогает, поскольку один и тот же код обслуживает разные точки входа.
Обновить оба расширения до исправленных версий необходимо, но этого недостаточно. Скрытого администратора нельзя найти через панель управления, поэтому список учётных записей с полными правами придётся сверить напрямую в базе данных и сравнить с тем, что показывает интерфейс. Любое расхождение указывает на внедрённый обязательный плагин. Проверить нужно и служебный каталог таких плагинов, и записи, отвечающие за секретные ссылки входа. Если удалить только вредоносный плагин, три пути возврата из четырёх останутся открытыми.
Заражённый сайт требует полной ревизии. Следует сменить пароли и служебные ключи аутентификации, а пароль самого старого администратора считать раскрытым, хотя напрямую его никто не похищал. Отдельного внимания заслуживают учётные записи, появившиеся примерно в тот момент, когда администратор просматривал заказы или заявки. Регулярное обновление расширений, двухфакторная аутентификация и контроль списка пользователей снижают риск, но не отменяют проверку файлов и базы после любого подозрительного открытия страницы.
Атакующие собирают разные уязвимости хранимого скриптинга и обращаются с ними как с взаимозаменяемыми способами доставки одной программы. Конкретный плагин для них второстепенен. Ценность представляет сам доступ к административной среде, а всё, что устанавливается после него, рассчитано на долгое присутствие и на устойчивость к удалению того расширения, через которое атака началась.