Представьте: незнакомый человек оставляет комментарий под событием на вашем сайте. Вы его не одобряете, посетители ничего не видят, комментарий спокойно лежит на модерации. Казалось бы, на этом все.
Но в уязвимых версиях The Events Calendar такого комментария могло хватить для захвата сайта, а в одном из сценариев — и сервера. Злоумышленнику не требовалась учетная запись. Не требовалось одобрение комментария. Администратору также не требовалось открывать подозрительную ссылку.
Если у вас стоит The Events Calendar, проверьте версию сейчас. Для защиты от обеих уязвимостей нужна версия 6.17.4.1 или новее. Проверьте все четыре компонента номера версии. Версия 6.17.4 все еще уязвима для одной из двух цепочек.
Почему модерация не спасала
Дело в том, что комментарий на модерации не совсем спрятан от своего автора. WordPress выдает автору комментария специальную ссылку для предпросмотра с хешем модерации. По ней он может увидеть собственный комментарий, ожидающий модерации, хотя для остальных тот еще не опубликован.
Дальше срабатывала особенность V2-шаблона The Events Calendar. Плагин собирал страницу события вместе с комментариями в буфер, а потом прогонял результат через do_blocks(). Эта функция нужна WordPress для обработки блоков. Если в ожидающем комментарии лежала специально подготовленная конструкция wp:legacy-widget, обычный пользовательский текст попадал в логику старых виджетов.
На пальцах: злоумышленник писал не просто сообщение вроде «Отличное мероприятие». Он прятал в комментарии инструкции, которые сайт по ошибке начинал обрабатывать как часть своей внутренней разметки. Чтобы запустить цепочку, злоумышленнику было достаточно открыть собственную ссылку для предпросмотра.
Обе описанные цепочки работали только при конкретной комбинации настроек: комментарии должны быть разрешены для записей типа tribe_events, а опция плагина Show comments on event pages — включена, чтобы комментарии выводились на странице события. Если комментарии к событиям были отключены или не выводились на страницах событий, описанные цепочки не срабатывали. Но обновление все равно нужно.
Две независимые цепочки с оценкой 9.8
Это не одна ошибка с двумя номерами. Исследователи нашли две независимые цепочки удаленного выполнения кода без авторизации. Обе получили CVSS 9.8. Технические подробности и проверочный код уже опубликованы в разборе Wordfence двух уязвимостей The Events Calendar.
CVE-2026-78006 затрагивает версии до 6.17.4 включительно. Здесь обработка старого виджета приводила к инъекции PHP-объектов через небезопасную десериализацию. Затем цепочка могла привести к выполнению команд операционной системы. То есть речь уже не про испорченную афишу или спам на странице, а про выполнение чужого кода на сервере.
CVE-2026-78159 затрагивает версии до 6.17.3 включительно. Вторая цепочка использовала обычный массив PHP как вызываемую конструкцию. В проверочном коде Wordfence таким образом вызывалась wp_update_user(): пароль администратора сбрасывался, после чего злоумышленник входил в панель управления, устанавливал вредоносный плагин и добивался выполнения произвольного кода.
Техника разная, итог для владельца бизнеса один. Кто-то посторонний получает контроль над сайтом, где лежат заявки, данные клиентов, расписание и доступы к другим сервисам.
Что на самом деле значит цифра 600 000+
У The Events Calendar больше 600 000 активных установок суммарно по всем версиям. Это не значит, что уязвимы 600 000 сайтов. Часть уже обновилась, часть вообще не показывала комментарии на страницах событий, а для обеих раскрытых цепочек такая настройка обязательна.
По состоянию на 17 сентября технические детали и проверочный код доступны публично. При этом в исходном отчете Wordfence нет подтвержденной массовой эксплуатации, а обе CVE отсутствуют в каталоге CISA KEV. Поэтому писать, что атаки уже идут по всему интернету, было бы неправдой. Но и откладывать обновление до следующего месяца теперь не стоит.
Проверка уязвимостей WordPress поможет заметить старую версию плагина. Однако по одному номеру версии нельзя определить, были ли комментарии к событиям одновременно разрешены и выведены на страницах событий и отображался ли до обновления специально подготовленный комментарий, ожидавший модерации.
Что сделать сегодня
- Обновите The Events Calendar до 6.17.4.1 или новее. Если уязвимая версия работала при включенных и отображаемых комментариях к событиям, до обновления сделайте описанный ниже снимок для сохранения доказательств. Версия 6.17.4.1 вышла 10 сентября и по состоянию на 17 сентября была текущей версией в каталоге WordPress.org. Не останавливайтесь на 6.17.4.
- После обновления проверьте страницы событий. Откройте календарь, отдельное событие, комментарии, форму бронирования и продажу билетов, если она есть. На нагруженном сайте разумно сначала сделать резервную копию и проверить обновление на тестовой копии. Подробнее — в нашей статье о том, как обновлять WordPress без неприятных сюрпризов.
- Если обновиться сразу нельзя, временно перекройте оба пути через комментарии. Отключите комментарии у
tribe_eventsи выключите Show comments on event pages. Это временная мера, а не замена обновлению. - Не теряйте обновления дальше. Если проверки плагинов, резервные копии и тестирование постоянно выпадают из рабочего графика, регулярное обслуживание WordPress закрывает эту рутину до того, как появляется срочная пятничная проблема.
Если опасная настройка была включена
Сайт работал на 6.17.4 или более старой версии, а комментарии под событиями были видны? Не начинайте с удаления спама и очистки логов. Сначала сделайте снимок файлов и базы. Сохраните подозрительные комментарии, веб-логи, журнал входов и данные защитного плагина. В инструкции про первые 24 часа после взлома мы как раз объясняем, почему улики идут раньше уборки.
Затем проверьте:
- комментарии к событиям, ожидающие модерации или попавшие в спам, особенно с текстом
wp:legacy-widget; - новые или измененные учетные записи администраторов, сбросы паролей, незнакомые активные сессии;
- недавно установленные или внезапно активированные плагины;
- измененные PHP-файлы в плагинах, теме, каталоге
uploadsи других доступных для записи каталогах; - неожиданные задания WordPress cron и серверного cron, а также запросы в логах за время, близкое к отправке подозрительного комментария.
Само обновление закрывает известные векторы атак, но не удаляет уже созданного администратора, вредоносный плагин или спрятанный PHP-бэкдор. Если такие следы нашлись, нужна полноценная очистка взломанного WordPress с проверкой файлов, базы, пользователей, сессий и cron. Сначала сохраните улики и очистите сайт; затем смените все затронутые пароли и ключи WordPress и завершите активные сеансы.
Модерация не устраняла уязвимость
Самая неприятная деталь этой истории проста: комментарий не требовалось публиковать. Автор получал ссылку с хешем модерации, по которой мог просмотреть свой комментарий до одобрения. Из-за уязвимого шаблона содержимое комментария при таком просмотре попадало в механизмы обработки блоков и виджетов WordPress.
Проверьте все четыре компонента номера версии, обновите плагин как минимум до 6.17.4.1 и выясните, были ли комментарии к событиям одновременно разрешены и видны. Если оба условия выполнялись — сначала сохраните следы, а затем проведите проверку. Чистая корзина спама выглядит приятно, но в расследовании она уже ничем не поможет.