Атака на WordPress на этот раз пришла не через пиратскую тему и не через забытый плагин на хостинге, а через доверенные JavaScript-файлы в CDN. Под подмену попали скрипты PushEngage, OptinMonster и TrustPulse, а суммарный охват этих плагинов превышает 1,2 млн сайтов. Для русскоязычной IT-аудитории это неприятное, но полезное напоминание: даже аккуратно собранный стек может развалиться, если скомпрометирован внешний поставщик кода.
По данным The Hacker News, вредоносный код вел себя не как обычный массовый инжектор. Он не срабатывал на каждом посетителе сайта и не шумел без нужды. Скрипт ждал, пока страницу откроет авторизованный администратор WordPress, и уже тогда использовал его активную сессию, чтобы создать новый аккаунт администратора, установить скрытый плагин и отправить данные для доступа на домен tidio.cc, замаскированный под реальный tidio.com. То есть схема была не про баннеры и редиректы, а про тихий и полноценный захват сайта.
Самое неприятное в этой истории в том, что заражение трудно заметить из панели WordPress. Бэкдор специально сделан так, чтобы не светиться в админке. Проверка “на глаз” здесь почти бесполезна: если сайт в нужный момент открыл администратор, компрометация уже могла произойти, а интерфейс CMS при этом продолжит выглядеть вполне прилично. Поэтому и Sansec, и PushEngage советуют считать любой сайт с этими плагинами в окно атаки потенциально взломанным и проверять его на стороне сервера, а не в браузере.
Временные окна отличались. По данным Sansec, OptinMonster и TrustPulse раздавали вредоносный код примерно 25 минут 12 июня: атака началась около 22:17 UTC и прекратилась к 22:42 UTC. У PushEngage окно оказалось заметно длиннее: несколько часов 12 июня, а на части CDN-узлов подмененный скрипт, по данным расследования, сохранялся вплоть до 14 июня. Именно это делает историю особенно показательной. У крупнейшего по числу установок OptinMonster более миллиона активных инсталляций, но короткое окно снижает потенциальный масштаб фактического взлома. У PushEngage установок меньше, около 9 тысяч, зато время экспозиции было намного больше. Иными словами, охват и реальный ущерб здесь не равны друг другу.
Технически атака выглядела предельно прагматично. В случае PushEngage были подменены обычные клиентские файлы pushengage-web-sdk.js и pushengage-subscription.js, которые раздавались через clientcdn.pushengage.com. Для OptinMonster и TrustPulse использовались отдельные CDN-эндпоинты Awesome Motive. После выполнения скрипта злоумышленник получал не просто учетку в админке, а более ценный приз: скрытый плагин с функциями web shell. Это уже полноценный канал удаленного выполнения команд на сервере. Дальше возможности стандартные и потому опасные: чтение и изменение файлов, выгрузка базы данных, установка новых закладок, подмена контента, внедрение скиммеров для кражи карт, редиректы и утечка данных. Дополнительный админ-аккаунт в этой конструкции играет роль запасного входа, если кто-то случайно удалит плагин, но пропустит нового пользователя.
С авторами инцидента и с точкой первоначального проникновения пока меньше ясности, чем хотелось бы. Все три затронутых плагина принадлежат одной компании, Awesome Motive, но на 15 июня официальные разъяснения по двум крупнейшим продуктам, OptinMonster и TrustPulse, так и не появились. PushEngage выпустил собственное уведомление и заявил, что атакующий сначала проник на сервер маркетингового сайта через известную уязвимость в UpdraftPlus, после чего получил CDN API key и уже с его помощью подменил раздаваемые файлы. Sansec эту версию окончательной не считает. Исследователи пишут, что точка входа пока не установлена: наиболее вероятны внутренние серверы Awesome Motive, возможен взлом CDN-аккаунта, а сам CDN-провайдер BunnyNet выглядит менее вероятным сценарием. Это важная развилка. Если проблема была только в одном веб-сервере с неудачно лежащим ключом, это один уровень провала. Если компрометация глубже, вопросы к управлению доступом и сегментации инфраструктуры будут уже совсем другого масштаба.
Отдельная деталь, которая делает историю менее похожей на случайный налет, чем хотелось бы: домен tidio.cc был зарегистрирован 28 апреля, то есть за несколько недель до самой атаки. Это не импровизация в духе “зашли, что-то быстро подменили, убежали”, а подготовленная операция. Плюс к этому у UpdraftPlus действительно есть отдельная уязвимость обхода аутентификации CVE-2026-10795 с оценкой 8.1 по версии Wordfence, и она уже исправлена. Но связывать именно ее с этой кампанией пока нельзя: подтверждения нет, а в подобных историях догадки очень быстро превращаются в ложные выводы, которыми потом живет половина рынка.
Для разработчиков и владельцев сайтов практический вывод довольно жесткий. Если на WordPress был активен PushEngage, OptinMonster или TrustPulse в период с 12 по 14 июня по UTC, нельзя ограничиться обновлением плагинов и очисткой кэша. Нужно проверить файловую систему на наличие каталогов content-delivery-helper и database-optimizer в wp-content/plugins, просмотреть список администраторов на предмет developer_api1 и подозрительных имен формата dev_xxxxxx, изучить веб-серверные логи на обращения к tidio.cc, включая пути /cdn-cgi/, а также к IP-адресу 84.201.6.54. Если такие следы есть, дальше уже без иллюзий: менять пароли админов, API-ключи, учетные данные базы данных и секретные ключи в wp-config.php. Причина проста: при удаленном выполнении кода нельзя честно обещать себе, что злоумышленник оставил только одну закладку и вел себя дисциплинированно.
Эта атака на WordPress неприятна не только сама по себе, но и как симптом. Защищать нужно уже не просто код у себя в репозитории и не только список установленных плагинов, а всю цепочку доставки клиентских скриптов, включая CDN, маркетинговые окружения и места хранения ключей. Чем больше SaaS-сервисов quietly живут внутри сайта через внешние JavaScript-вставки, тем выше шанс однажды обнаружить, что компрометировали не ваш сервер напрямую, а ваше доверие к чужому. Подробнее об инциденте пишет .