
POC для CVE-2026-78006 The Events Calendar <= 6.17.4 — неаутентифицированная инъекция PHP-объектов с переходом к удалённому выполнению кода
POC для CVE-2026-78006 The Events Calendar <= 6.17.4 - Неаутентифицированная инъекция PHP-объектов с переходом к удалённому выполнению кода
#КОНТАКТ telegram по любым вопросам: @soldout0O
Если вам нравится моя работа, рассмотрите возможность поддержать проект через USDT (TRC20): TQBA72kakjCZLnJt8fJYcD7dyQCEpzNtVN
The Events Calendar для WordPress содержит неаутентифицированную уязвимость инъекции PHP-объектов, которая может быть использована для удалённого выполнения кода.
Уязвимый путь кода включает:
is_safe_widget_instance()enable_rendering_widget_copied()unserialize()do_blocks()При задокументированных условиях неаутентифицированный злоумышленник может передать специально сформированную разметку блоков через комментарий к событию и достичь уязвимого пути десериализации до того, как произойдёт модерация комментария.
Уязвимость существует из-за того, что защита плагина вокруг экземпляров виджетов является недостаточной.
Уязвимый поток можно обобщить следующим образом:```text Unauthenticated Comment | v Pending Event Comment | v WordPress Moderation-Hash URL | v Unauthenticated Author Can View Own Pending Comment | v V2 Single-Event Template | v do_blocks() | v Injected Block Markup | v enable_rendering_widget_copied() | v Forged Integrity Attribute | v is_safe_widget_instance() | v PHP Magic Methods / Object Deserialization | v unserialize() | v PHP Object Injection | v Remote Code Execution
---
# Уязвимый плагин
**Плагин:** The Events Calendar
**Уязвимость:** Неаутентифицированная инъекция PHP-объектов, приводящая к
удалённому выполнению кода
**Уязвимые версии:** Все версии вплоть до **6.17.4** включительно,
согласно рекомендациям Wordfence.
> [!IMPORTANT]
> Публикуемый в этом репозитории PoC-исследование внутренне
> позиционируется как нацеленное на `<= 6.17.2`.
>
> Указанный выше диапазон версий соответствует рекомендациям Wordfence
> (`<= 6.17.4`). Всегда проверяйте точную уязвимую/исправленную версию
> по рекомендациям производителя перед тестированием развёртывания.
---
# Первопричина
Уязвимое поведение связано с взаимодействием между
проверкой безопасности виджета и поведением десериализации объектов PHP.
Ключевые задействованные функции:```text
is_safe_widget_instance()
enable_rendering_widget_copied()
Проверка безопасности недостаточна, поскольку PHP может вызывать магические методы во время своего поведения при парсинге/десериализации до того, как предполагаемая проверка безопасности обеспечит эффективную защиту.
Цепочка также зависит от того, что плагин генерирует корректное значение целостности для переданного экземпляра виджета.
Одной из наиболее важных характеристик этой уязвимости является то, что атакующему не нужна существующая учётная запись WordPress.
Путь атаки использует то, как WordPress предоставляет доступ к собственному ожидающему комментарию пользователя через URL с хешем модерации.
Соответствующие условия таковы:```text Comments enabled + Comments visible on events + Attacker can submit an event comment + V2 single-event template active
После отправки комментария WordPress может предоставить неаутентифицированный
URL с moderation-hash, который позволяет комментатору просмотреть свой собственный
ожидающий модерации комментарий.
Это создаёт неаутентифицированный механизм доставки для сформированной разметки
блока.
---
# Техническое объяснение
## 1. Отправка комментария
Злоумышленник отправляет комментарий, связанный с событием.
Комментарий не обязательно должен быть одобрен.
Важным свойством является то, что WordPress может раскрыть комментарий через
механизм moderation-hash.
---
## 2. Доступ через moderation-hash
WordPress предоставляет комментатору URL, который позволяет комментатору
просмотреть свой собственный ожидающий модерации комментарий.
Это означает, что злоумышленник может достичь уязвимого пути рендеринга, не
дожидаясь модерации.
Концептуально:```text
POST Comment
|
v
Pending Comment
|
v
Moderation Hash
|
v
Unauthenticated Access
Шаблон одиночного события V2 из The Events Calendar обрабатывает содержимое события и HTML, связанный с комментариями.
Соответствующий путь обработки WordPress в конечном итоге достигает:```text do_blocks()
Это важно, поскольку блочная разметка, встроенная в отрендеренный контент,
интерпретируется как данные блоков WordPress.
---
## 4. Сконструированные данные блока
PoC создаёт блок legacy-widget, содержащий сериализованный экземпляр
виджета.
Исследовательская реализация строит блок, используя закодированный
сериализованный экземпляр и атрибут целостности.
Уязвимый путь в конечном итоге обрабатывает эти данные как экземпляр виджета.
---
## 5. Обход проверки целостности
Поведение `enable_rendering_widget_copied()` плагина может быть
использовано для создания корректного атрибута целостности для
контролируемых злоумышленником данных виджета.
Это позволяет вредоносному экземпляру виджета пройти ожидаемую
проверку целостности и достичь уязвимого пути обработки.
---
## 6. Небезопасная обработка объектов
Уязвимая защита `is_safe_widget_instance()` недостаточна
против объекта, переданного через сконструированный экземпляр виджета.
Поведение PHP при обработке объектов может вызывать магические методы
в процессе десериализации.
Результатом является эксплуатируемый примитив PHP Object Injection.
---
## 7. Цепочка гаджетов
Исследовательский PoC конструирует структуры объектов WordPress / The Events Calendar,
которые обеспечивают вызываемое поведение во время десериализации.
PoC использует объекты, ориентированные на обратные вызовы, и сериализованные
структуры классов для построения исследовательской полезной нагрузки.
---
## 8. Выполнение кода
Итоговое воздействие — удалённое выполнение кода.
PoC содержит исследовательский этап веб-шелла и логику
создания администратора.
Для безопасной проверки уязвимости важная граница безопасности
уже продемонстрирована успешным выполнением уязвимой
цепочки десериализации.
---
# Почему уязвимость критична
Сочетание:```text
Unauthenticated
+
Remote
+
PHP Object Injection
+
RCE
создаёт высокоэффективный путь атаки.
Злоумышленнику не нужны:
Основное требование к среде — доступность уязвимого пути отображения событий/комментариев.
Репозиторий содержит исследовательскую реализацию на Python.
Загруженный PoC представляет собой асинхронный запускающий модуль вокруг оригинальной исследовательской логики.
Он использует:```text Python aiohttp rich
Реализация выполняет цепочку уязвимостей через поэтапную
доставку и проверку полезной нагрузки.
В исходном коде PoC его архитектура описывается так:```text
payload building
|
v
stage 1
|
v
verification
|
v
stage 2
Исследовательская реализация включает функциональность для: