Злоумышленники подменили доверенные JavaScript-файлы, используемые сайтами WordPress с установленными плагинами PushEngage, OptinMonster и TrustPulse. В результате эти скрипты стали инструментом для получения полного контроля над сайтами.
Вредоносный код активировался только в том случае, если страницу открывал авторизованный администратор WordPress. В этом случае скрипт создавал новую учетную запись администратора под контролем атакующего и устанавливал скрытый плагин, обеспечивающий постоянный доступ к системе. Для обычных посетителей сайта вредоносная активность не проявлялась.
Любой сайт, который загрузил зараженные версии скриптов, следует считать потенциально скомпрометированным. Все три затронутых плагина принадлежат компании Awesome Motive, однако по состоянию на 15 июня официальных комментариев относительно OptinMonster и TrustPulse опубликовано не было.
О кампании впервые сообщила компания Sansec 13 июня. Исследователи обнаружили одинаковый вредоносный код в JavaScript-файлах, распространяемых для всех трех плагинов.
Спустя сутки PushEngage опубликовал собственное уведомление об инциденте и подтвердил, что злоумышленники распространяли измененные версии его скриптов, что могло привести к полному захвату сайтов.
PushEngage, который несколько лет назад вошел в состав Awesome Motive, остается единственным из трех сервисов, выпустившим рекомендации для пользователей. Владельцы сайтов с OptinMonster и TrustPulse пока не получили официальных инструкций.
Продолжительность атаки различалась для каждого продукта. По данным Sansec, вредоносный код присутствовал в скриптах OptinMonster и TrustPulse около 25 минут 12 июня — примерно с 22:17 до 22:42 UTC. В случае PushEngage зараженные файлы распространялись значительно дольше: несколько часов 12 июня, а на отдельных CDN-узлах оставались доступными вплоть до 14 июня.
Таким образом, два наиболее популярных плагина подвергались атаке минимальное время, тогда как PushEngage оказался под воздействием дольше остальных.
По оценкам Sansec, совокупная аудитория трех плагинов превышает 1,2 миллиона сайтов. Основную часть составляет OptinMonster, у которого более миллиона активных установок. WordPress-плагин PushEngage установлен более чем на 9 тысячах сайтов. Эти цифры отражают количество потенциально затронутых ресурсов, а не число фактически взломанных сайтов.
Как работала атака
При обычном посещении страницы зараженный скрипт не выполнял никаких действий. Активация происходила только при загрузке страницы администратором WordPress, после чего использовалась его активная сессия для захвата управления сайтом.
По этой причине определить факт компрометации через панель управления WordPress невозможно. Бэкдор специально скрывался от административного интерфейса, поэтому надежную проверку можно выполнить только на стороне сервера.
В случае PushEngage были изменены стандартные скрипты pushengage-web-sdk.js и pushengage-subscription.js, распространяемые через домен clientcdn.pushengage.com. Для OptinMonster и TrustPulse использовались другие CDN-инфраструктуры Awesome Motive.
Компания PushEngage заявила, что остальные системы не пострадали. Признаков компрометации основного приложения или серверов с клиентскими данными обнаружено не было.
Согласно описанию PushEngage, после выполнения скрипта в сессии администратора происходило следующее:
использовались полномочия текущего администратора;
создавалась новая учетная запись администратора под контролем злоумышленника;
устанавливался скрытый плагин, отсутствующий в панели управления;
данные новой учетной записи и информация о сайте отправлялись на домен tidio[.]cc, имитирующий легитимный сервис tidio.com.
Sansec обнаружила такую же последовательность действий во всех трех плагинах. Домен tidio[.]cc был зарегистрирован еще 28 апреля, за несколько недель до начала атаки, что указывает на заранее подготовленную операцию.
Наиболее опасным компонентом оказался скрытый плагин. Он разворачивал так называемую веб-оболочку (web shell) — механизм удаленного выполнения команд на сервере. Любой, кто знает специальный URL-адрес, может запускать код без авторизации в WordPress.
После получения такого доступа злоумышленник способен читать и изменять файлы сайта, копировать базы данных, устанавливать дополнительные бэкдоры, внедрять скрипты для кражи банковских карт, перенаправлять пользователей на сторонние ресурсы или похищать данные.
Дополнительная учетная запись администратора служит резервным способом доступа. Даже если скрытый плагин будет удален, злоумышленник сможет вернуться через оставленную учетную запись. Более того, возможность выполнения произвольного кода позволяет создать дополнительные механизмы закрепления в системе. Поэтому удаление найденного плагина и подозрительных пользователей не гарантирует полного устранения угрозы.
Предполагаемый путь проникновения
В вопросе первоначального вектора атаки позиции PushEngage и Sansec расходятся.
По версии PushEngage, злоумышленники сначала получили доступ к серверу маркетингового сайта компании через известную уязвимость в UpdraftPlus — популярном WordPress-плагине резервного копирования. Этот сервер не использовался для работы основного продукта и хранения клиентских данных.
Однако ключевым объектом атаки оказался не сам сервер, а находившийся на нем API-ключ CDN. Получив этот ключ, злоумышленники смогли изменять файлы, которые CDN доставлял на клиентские сайты, без необходимости взламывать основную инфраструктуру PushEngage.
Sansec считает, что источник компрометации пока не установлен. По мнению исследователей, наиболее вероятным вариантом остаются серверы Awesome Motive. Также допускается компрометация CDN-аккаунта, тогда как участие CDN-провайдера BunnyNet оценивается как маловероятное.
В своем публичном расследовании Sansec не рассматривает и не подтверждает версию с UpdraftPlus. Эта информация исходит исключительно от PushEngage.
При этом для UpdraftPlus действительно была обнаружена уязвимость обхода аутентификации CVE-2026-10795. Специалисты Wordfence присвоили ей рейтинг 8.1 из 10 по шкале опасности. Уязвимость уже исправлена, однако фиксировались реальные попытки ее эксплуатации. Всем пользователям UpdraftPlus рекомендуется установить обновления независимо от того, связана ли эта ошибка с текущим инцидентом.
На данный момент точный способ первоначального проникновения остается неизвестным.
Что проверить владельцам сайтов
По данным Sansec, зараженные версии файлов OptinMonster и TrustPulse были удалены до 13 июня. Скрипты PushEngage на части CDN-серверов оставались доступными до 14 июня.
Компания PushEngage заявила, что уже заменила зараженные файлы, очистила CDN-кэш, обновила CDN-ключ и связанные учетные данные, а также перенесла маркетинговый сайт на новую инфраструктуру.
Однако эти действия не устраняют последствия для сайтов, которые уже были скомпрометированы.
Индикаторы компрометации
Поскольку вредоносный компонент скрывается от панели управления WordPress, отсутствие подозрительных записей в административном интерфейсе не означает, что сайт не пострадал.
Если в период атаки использовались PushEngage, OptinMonster или TrustPulse, необходимо выполнить проверку непосредственно на сервере.
Следует выполнить следующие действия:
провести серверное сканирование файловой системы;
проверить каталог wp-content/plugins на наличие директорий content-delivery-helper ("Content Delivery Helper") и database-optimizer ("Database Optimizer");
удалить все неизвестные учетные записи администраторов, особенно developer_api1 и пользователей с шаблоном имени dev_xxxxxx;
изучить журналы веб-сервера за период с 12 по 14 июня UTC и проверить обращения к домену tidio.cc, включая пути /cdn-cgi/, а также соединения с IP-адресом 84.201.6.54.
При обнаружении любых признаков компрометации рекомендуется считать систему полностью взломанной и немедленно заменить пароли администраторов, API-ключи, учетные данные баз данных и секретные ключи (salts), используемые в файле wp-config.php.
Поскольку злоумышленники получили возможность выполнять произвольный код на сервере, нельзя исключать наличие дополнительных механизмов закрепления, которые не связаны с обнаруженными компонентами атаки.
Источник: HN