Команда Wordfence Threat Intelligence Team получила 7 августа 2026 года уведомление о компрометации цепочки поставок BdThemes – поставщика плагинов для WordPress. В настоящее время все затронутые плагины временно отключены в каталоге WordPress.org до проведения полной проверки и дальнейшего расследования.
Технический обзор уязвимости
Плагины BdThemes поставляются с компонентом Biggopti – внутренней системой, которая получает промо-баннеры с API-сервера и отображает их в административной панели WordPress. API работает на базе статического бакета DigitalOcean Spaces, защищенного Cloudflare. Это не динамический сервер приложений: это плоские JSON-файлы, предоставляемые из объектного хранилища.
XSS-уязвимость в плагине связана с кодом анализа JSON-ответов; злоумышленники получили write-доступ к этому бакету, заменив легитимные JSON-ответов специально созданными пейлоадами для эксплуатации дыры. XSS срабатывает в браузере каждого авторизованного администратора, незаметно, при каждой загрузке wp-admin. Затем внедренный скрипт создает фейковые аккаунты администраторов, загружает плагин веб-оболочки и связывается с C2-сервером.
Чтобы стать жертвой атаки, не нужно даже обновлять никаких плагинов. Файлы на диске не меняются. Атака полностью осуществляется через API, невидима для сканеров целостности файлов и практически незаметна для файрволов.
XSS-уязвимость затрагивает только администраторов
Каждый плагин BdThemes, использующий систему Biggopti, подключает клиентский JS-ресурс при вызове admin_init, заставляя его выполняться безусловно при каждой загрузке страниц wp-admin. Этот скрипт получает данные промо-баннеров из конечной точки API поставщика. Когда скрипт формирует HTML-контейнер с уведомлением в DOM, он напрямую конкатенирует поле display_id из удаленного JSON-ответа с атрибутом id без экранирования на стороне клиента:
// unescaped var f = t.display_id || t.id || "default"; // injected in DOM var m = "bdt-admin-biggopti-api-biggopti-" + f; A = 'id="' + m + '"';
По-видимому, это является недосмотром разработчиков, поскольку позже в том же самом коде атрибут data-display-id уже экранируется корректно.
История коммитов SVN показывает, что внедрение этого неэкранированного атрибута было произведено 1 марта 2026 года в Prime Slider (bdthemes-prime-slider-lite) 4.1.9, а затем применено и к другим плагинам. Хотя в более поздних релизах был введен DOMParser-санитайзер для поля содержимого баннера (удаляющий опасные HTML-теги и встроенные обработчики), внедрение атрибута id осталось неэкранированным.
Злоумышленник, имеющий права на запись в бакет поставщика, заменил легитимные JSON-ответы специально созданными пейлоадами. Внедренный в display_id код срабатывает автоматически без кликов со стороны администратора за счет хитрой комбинации HTML и CSS-анимации.

Гибкая архитектура с несколькими пейлоадами
Внедренный обработчик событий инициирует многоэтапную компрометацию, получая внешние скрипты в зависимости от доступности инфраструктуры злоумышленника.
Базовый пейлоад (w2.js)
- Основной пейлоад передается плагинам с использованием конечной точки API api-data-all-records. Когда w2.js выполняется в рамках аутентифицированной сессии администратора, он совершает следующую последовательность действий:
- Проверка C2: Он связывается с сервером C2 по адресу ia-cdn[.]com/fz/c, указывая на веб-сайт жертвы, чтобы получить инструкции по целям, прерывая процесс, если C2 возвращает статус «skip» или «done».
- Создание фейкового администратора: Используя X-WP-Nonce, присутствующий в активной сессии администратора, он создает нового администратора через REST API WordPress. Имеется также запасной fallback для создания админа через стандартную отправку формы.
- Установка вебшелла: Он загружает фейковый ZIP-архив плагина с C2-сервера и устанавливает его через стандартную форму загрузки плагина. Замаскированный под wp-smart-thumbnails или похожие нейтральные слаги, этот фейковый плагин содержит веб-оболочку с именем emer-run.php, которая вызывается напрямую по URL-адресу.
- Must-Use (MU) бэкдоры плагина: Вызов emer-run.php устанавливает два модуля обеспечения постоянного доступа в каталог Must-Use: wp-content/mu-plugins/. Оба полученных нами образца были датированы сентябрем 2025 года, чтобы соответствовать легитимным меткам времени файловой системы (имена файлов могут варьироваться в зависимости от заражения). Первый модуль — это бэкдор «магического входа», открывающий неавторизованный административный доступ через параметр URL (?_wplogin=<token>), нацеленный на администратора с самым длительным стажем регистрации на сайте. Второй модуль — это фоновый компонент защиты от анализа, который подключается к запросам к БД WordPress, чтобы скрыть созданные мошеннические аккаунты из списка администраторов и соответственно уменьшить общее количество пользователей.
- Эксфильтрация. Все результаты этапа выполнения отправляются обратно на C2-сервер через navigator.sendBeacon.
Альтернативный пейлоад
Вторичный скрипт размещается непосредственно в инфраструктуре BdThemes и предоставляется плагинам через конечную точку API api-data-records. Он генерирует детерминированные административные учетные данные, математически полученные из имени хоста веб-сайта-жертвы.
Этот алгоритм генерирует предсказуемые имена пользователей (bd_ с последующим 6-символьным хешем в формате Base36) и пароли (Bd@26! с последующим хешем и x), сопоставляя их с адресом электронной почты @wordpress.org. Поскольку учетные данные детерминированы, злоумышленникам не нужно централизованно хранить списки скомпрометированных сайтов.
Сгенерированные учетные данные затем используются для создания мошеннического администратора; результаты передаются на сервер C2, при этом в браузере жертвы сохраняется флаг localStorage (если он доступен).
Злоумышленники и масштабы атаки
Домен С2 связан с теми же злоумышленниками, которые стояли за атаками на Advanced Responsive Video Embedder и OptinMonster, произошедшими за последние два месяца.
Основная цель этой кампании — широкомасштабное, скрытое административное закрепление и удаленное выполнение кода в миллионах сред WordPress. Эта компрометация цепочки поставок особенно коварна, поскольку не требовала доступа к веб-сайтам; достаточно было отравления простого рекламного фида, чтобы использовать уязвимость в базовом коде отображения.
Тот факт, что вредоносные записи JSON и вторичный пейлоад x.js были загружены непосредственно в собственный бакет поставщика, указывает на серьезную компрометацию учетных данных облачного хранилища BdThemes или внутренней инфраструктуры.
Начиная с 08.08.2026, обе конечные точки API возвращают чистый JSON.
Затронутые плагины:
- Element Pack Addons for Elementor (bdthemes-element-pack-lite)
- Prime Slider Addons for Elementor (bdthemes-prime-slider-lite)
- Pixel Gallery Addons for Elementor (pixel-gallery)
- Ultimate Post Kit Addons for Elementor (ultimate-post-kit)
- Ultimate Store Kit – Addon For WooCommerce, EDD and Elementor (ultimate-store-kit)
- Live Copy Paste for Elementor (live-copy-paste)
- Smart Admin Assistant (smart-admin-assistant)
Мы рекомендуем всем владельцам сайтов WordPress, использующим плагины BdThemes, немедленно проверить списки пользователей БД, каталоги плагинов и таблицу опций БД на наличие каких-либо признаков компрометации.
Источник: https://www.wordfence.com/blog
