Как отравленный JSON открыл WordPress для захвата?

Компрометация цепочки поставок BdThemes обошлась без подмены исходных файлов в официальном репозитории . Злоумышленники получили доступ на запись к удалённому хранилищу DigitalOcean Spaces и заменили штатные JSON-записи вредоносными. Плагины загружали эти данные для показа рекламных баннеров в панели управления, после чего XSS-уязвимость запускала JavaScript в браузере авторизованного администратора. Исследователь Wordfence Паоло Трессо описал механику так: «В отличие от традиционных атак на цепочку поставок программного обеспечения, ни один файл исходного кода в официальном репозитории не был изменён. Вместо этого злоумышленники отравили статический удалённый поток JSON, который загружался административным компонентом рекламных баннеров».
Как отравленный JSON открыл WordPress для захвата?
Изображение носит иллюстративный характер

Под угрозой оказались семь продуктов BdThemes:
    []
Element Pack Addons for Elementor – Elementor Widgets, Elementor Templates, Elementor Addons, слаг bdthemes-element-pack-lite, более 100 000 активных установок.
[]Live Copy Paste for Elementor – Cross Domain Copy Paste & Page Duplicator, live-copy-paste, более 6 000 установок.
[]Pixel Gallery Addons for Elementor – Easy Grid, Creative Gallery, Drag and Drop Grid, Custom Grid Layout, Portfolio Gallery, число установок не указано.
[]Prime Slider Addons for Elementor – Widgets, Templates & Elementor Addons, bdthemes-prime-slider-lite, число установок не указано.
[]Smart Admin Assistant – Dashboard and Site Enhancements, число установок не указано.
[]Ultimate Post Kit Addons for Elementor, число установок не указано.
[]Ultimate Store Kit – Addon For WooCommerce, EDD and Elementor, более 6 000 установок.

Изменение, открывшее путь атаке, впервые появилось 1 марта 2026 года в Prime Slider Addons for Elementor, bdthemes-prime-slider-lite, а затем попало в другие плагины BdThemes. 7 и 8 августа 2026 года, в зависимости от продукта, команда каталога WordPress закрыла затронутые страницы и временно отключила скачивание. Посетители видели уведомление о закрытии плагина на время «полной проверки».
Уязвимый внутренний компонент назывался Biggopti. Он обращался к API-серверу поставщика, забирал подходящие JSON-файлы из бакета DigitalOcean Spaces и выводил рекламные материалы в административной панели WordPress. Парсер недостаточно экранировал на стороне клиента параметр display_id, поступавший через Sigmative API. Тот, кто контролировал API либо связанное с ним хранилище, мог поместить в ответ произвольный веб-скрипт. Уязвимость получила 5,4 балла по CVSS, то есть среднюю оценку, хотя её расположение в общей системе распространения позволяло массово захватывать сайты.
Вредоносный код срабатывал на каждой загрузке страницы wp-admin. Администратору хватало открыть панель управления: не требовались обновление плагина, появление изменённых файлов на диске или новая версия в . Wordfence сообщил: «Злоумышленники получили доступ на запись к этому бакету, заменив законные JSON-ответы специально подготовленными полезными нагрузками для эксплуатации уязвимости». Далее всё происходило в браузере: «XSS срабатывает внутри браузера каждого вошедшего администратора, незаметно, при каждой загрузке страницы wp-admin. Затем внедрённый скрипт создаёт посторонние учётные записи администраторов, загружает плагин с веб-шеллом и связывается с командно-контрольным сервером C2».
Основная нагрузка поступала через API-конечную точку api-data-all-records. JavaScript передавал C2-серверу origin сайта и получал инструкции, предназначенные для конкретной жертвы. Если сервер отвечал статусом skip или done, операция прекращалась. В материалах сохранилась повреждённая либо усечённая ссылка на файл и адрес: «w2.]com/fz/c")», поэтому восстановить полный URL по этому фрагменту нельзя. При продолжении атаки скрипт через WordPress REST API создавал несанкционированного администратора и отправлял результаты оператору.
Следом с C2 загружался ZIP-архив поддельного плагина. Его устанавливали через штатную форму загрузки плагинов WordPress, что позволяло разместить PHP-веб-шелл emer-run.php и получить удалённое исполнение кода. Такой способ внешне напоминал обычные действия администратора и не требовал прямой записи в исходники уже установленного продукта.
Веб-шелл помещал два модуля постоянного доступа в каталог mu-plugins, предназначенный для Must-Use plugins. Первый создавал magic-login-бэкдор: запрос с параметром ?_wplogin=<token> открывал административный доступ без обычной аутентификации и выбирал администратора, зарегистрированного на сайте раньше остальных. Второй модуль вмешивался в запросы WordPress к базе данных, скрывал посторонних пользователей из административного списка и исправлял отображаемое общее число учётных записей так, чтобы вредоносные аккаунты в него не входили.
Исследователи нашли и запасную нагрузку x.js, размещённую прямо в инфраструктуре разработчика и выдававшуюся через другую конечную точку, api-data-records. Скрипт математически выводил имя администратора и пароль из hostname заражённого сайта. Для одного домена всегда получалась одна и та же пара учётных данных. Операторам не приходилось хранить центральный перечень сайтов и паролей, а специалисты по реагированию могли вычислить ожидаемые реквизиты для подозрительного домена и найти соответствующего пользователя. Wordfence сформулировал это так: «Поскольку учётные данные детерминированы, злоумышленникам не нужно централизованно хранить списки скомпрометированных сайтов, а специалисты по реагированию могут вычислить точные имя пользователя и пароль для поиска на подозреваемых доменах». В исходных материалах перед этой мыслью также остался усечённый фрагмент «адрес электронной почты org». Созданный аккаунт использовался для захвата управления, а результат отправлялся на C2.
Инфраструктуру командно-контрольного сервера связали с двумя недавними атаками на цепочки поставок WordPress: против Advanced Responsive Video Embedder, уязвимость CVE-2026-18072, и против OptinMonster. В тех эпизодах плагины снабжались бэкдорами, предоставлявшими неавторизованному атакующему полные административные права через единый жёстко заданный токен либо через скрытого администратора и замаскированный плагин. Учётная запись и плагин создавались лишь после входа законного администратора. Совпадение поведения и C2 указывает на связанную операцию или общую инфраструктуру.
Размещение вредоносных JSON-записей и x.js непосредственно в ресурсах поставщика заставило Wordfence говорить о компрометации выше по цепочке: «Тот факт, что вредоносные JSON-записи и вторичная нагрузка x.js были загружены непосредственно в собственный бакет поставщика, указывает на серьёзную компрометацию учётных данных облачного хранилища BdThemes либо внутренней инфраструктуры компании». Целью были скрытый административный доступ, долговременное присутствие и исполнение кода без необходимости вести централизованный список всех жертв.
Раскрытие истории BdThemes последовало через несколько дней после исправления отдельной уязвимости WordPress CVE-2026-64638, известной как XSS2Shell. Это отражённая XSS до аутентификации с оценкой CVSS 8,9. Для эксплуатации вошедший администратор должен был взаимодействовать со страницей под контролем атакующего; успешная атака позволяла перейти к исполнению PHP-кода на сервере WordPress. В случае BdThemes проверка не должна ограничиваться контрольными суммами плагинов: требуются поиск emer-run.php, аудит каталога mu-plugins, неизвестных администраторов и изменённого счётчика пользователей, анализ обращений к C2 и следов запросов ?_wplogin=, а также смена административных, облачных и инфраструктурных учётных данных.[/final]


Новое на сайте

Ссылка