
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
Исследовательская реализация включает функциональность для:
PoC также содержит проверки, учитывающие особенности платформы, для сред Windows и Unix-подобных систем.
Исследовательский инструмент может использоваться против отдельной авторизованной установки WordPress.
Концептуально:```text Single URL | v Target Discovery | v Event Discovery | v Comment Delivery | v Vulnerability Trigger | v Verification
Одноцелевой рабочий процесс полезен для:
* Локальных лабораторий
* Систем staging
* Воспроизведения CVE
* Тестирования вендоров
* Авторизованного тестирования на проникновение
* Исследований в области безопасности
---
# Список URL-адресов
Асинхронный запуск также поддерживает список URL-адресов.
Формат ввода:```text
one URL per line
Пример:```text https://lab-wordpress-01.example https://lab-wordpress-02.example https://lab-wordpress-03.example
Пустые строки и комментарии можно игнорировать.
Запускающий модуль загружает цели и обрабатывает их параллельно, используя
настроенное количество потоков/параллельных задач.
---
# Параллельная обработка
PoC поддерживает параллельную обработку нескольких целей.
Концептуально:```text
URL LIST
|
+-----------+-----------+
| | |
v v v
Worker 1 Worker 2 Worker 3
| | |
v v v
Target Target Target
| | |
+-----------+-----------+
|
v
Results
Реализация использует асинхронный семафор для управления уровнем параллелизма.
Настроенный по умолчанию уровень параллелизма в runner'е — 20.
Асинхронный runner может создавать два файла результатов:```text shells.txt admins.txt
`shells.txt` содержит обнаруженные URL загруженных шеллов.
`admins.txt` содержит информацию о результатах поиска администраторов в виде:```text
url | user | pass
[!WARNING] Эти файлы могут содержать крайне конфиденциальные учётные данные и артефакты постэксплуатации.
Никогда не публикуйте сгенерированные файлы результатов на GitHub.
Для публичных исследований уязвимостей храните эти файлы вне Git-
репозитория и добавьте их в .gitignore.
shells.txt admins.txt
For responsible vulnerability validation:
START
|
v
Проверить версию плагина
|
v
Проверить предварительные требования
|
v
Убедиться, что комментарии включены
|
v
Убедиться, что события предоставляют комментарии
|
v
Воспроизвести в лаборатории
|
v
Подтвердить уязвимое поведение
|
v
Зафиксировать доказательства и логи
|
v
Остановиться / раскрыть информацию```
Use the minimum level of interaction required to prove the finding.
---
# Important Prerequisites
The Wordfence advisory identifies the following important condition:
```text
Комментарии должны быть включены
и
комментарии должны быть видны на событиях```
The attack relies on the ability of an unauthenticated commenter to view
their own pending comment through the WordPress moderation-hash URL.
If comments are disabled or the relevant event comment path is not
available, the documented unauthenticated delivery mechanism may not be
reachable.
---
# Platform Considerations
The PoC contains environment-detection functionality.
The research code attempts to identify information such as:
```text
Операционная система
Текущий пользователь выполнения
Текущий рабочий каталог
Корень документа
Серверное программное обеспечение
HTTP-хост
Информация о PHP```
These values are useful for controlled research and understanding the
impact of successful code execution.
---
# Payload Architecture
The serialized payload contains multiple nested PHP objects.
The research implementation builds structures associated with:
```text
Tribe__Utils__Callback
Tribe\Utils\Element_Classes
stdClass```
The serialized structures are then embedded into a WordPress legacy
widget block.
Conceptually:
```text
PHP Object Graph
|
v
Serialized Object
|
v
Base64 Encoding
|
v
Legacy Widget Block
|
v
WordPress do_blocks()
|
v
The Events Calendar
|
v
Object Deserialization```
---
# Stage 1
The research PoC's first stage is designed to verify that the injected
object graph reaches the intended execution path.
The stage contains multiple controlled callbacks used to determine
whether code execution or environment disclosure occurred.
The implementation includes research checks such as:
```text
Текущий рабочий каталог
Пользователь выполнения
Корень документа
Информация о сервере
Информация о PHP```
---
# Stage 2
If the initial stage does not directly establish the required persistent
artifact location, the PoC contains a second-stage mechanism that
attempts alternative locations.
The research implementation specifically considers WordPress upload
locations and document-root-related paths.
---
# Administrator Stage
The PoC also contains administrator creation functionality.
The research implementation can construct a WordPress administrator
through the vulnerable execution path.
This demonstrates that successful exploitation can result in both:
```text
Удалённое выполнение кода
+
Постоянный доступ администратора WordPress```
Administrator credentials generated during research should never be
committed to source control.
---
# Webshell Stage
The PoC contains a webshell stage intended for controlled research.
The webshell is packaged as a WordPress plugin ZIP and deployed through
an authenticated WordPress administrator session established by the
chain.
The research implementation uses a secret token to gate shell requests.
> [!CAUTION]
> The webshell is an exploitation artifact.
>
> Use it only in an isolated laboratory or during an explicitly
> authorized penetration test, and remove it immediately after testing.
---
# Verification
Successful vulnerability validation can be based on evidence such as:
```text
Версия плагина
+
Достижимое событие
+
Доставка комментария
+
Отрисовка moderation-hash
+
Обработка уязвимого виджета
+
Доказательство контролируемого выполнения```
For responsible disclosure, collect only the minimum evidence required.
---
# Impact
Successful exploitation may allow an unauthenticated attacker to:
* Execute arbitrary PHP code
* Execute commands in the context of the web server
* Read sensitive application information
* Access environment information
* Modify WordPress files
* Create administrator accounts
* Install malicious plugins
* Establish persistence
* Potentially compromise the underlying server
The ultimate impact depends on the privileges of the PHP process and
the hosting environment.
---
# Detection
Defenders should monitor for unusual activity involving:
* Event comment submissions
* Pending comments followed by moderation-hash access
* Suspicious block markup
* Legacy widget blocks
* Unexpected widget instance data
* Unexpected serialized PHP objects
* PHP execution triggered during event rendering
* Unexpected plugin installations
* New administrator accounts
* Unexpected PHP files
* Suspicious files under `wp-content/uploads/`
A compromise investigation should correlate:
```text
Логи веб-сервера
+
Логи WordPress
+
Активность базы данных
+
Целостность файлов
+
Учётные записи администратора```
---
# Indicators of Compromise
Potential indicators include:
```text
Неожиданные учётные записи администратора
Неожиданные каталоги плагинов
Неожиданные PHP-файлы
Подозрительные файлы в wp-content/uploads/
Неожиданные комментарии к событиям
Аномальные запросы moderation-hash
Неожиданные запросы, связанные с виджетами
Неожиданное выполнение PHP```
Because individual indicators can have legitimate explanations, they
should be investigated in context.
---
# Mitigation
The primary mitigation is to update **The Events Calendar** to a fixed
version provided by the vendor.
Until the plugin is updated, defenders should consider:
* Disabling comments where operationally acceptable
* Restricting public event comments
* Monitoring event comment traffic
* Reviewing recently created administrator accounts
* Monitoring plugin installation activity
* Performing file-integrity checks
* Reviewing web-server logs
* Reviewing WordPress logs
If compromise is suspected, treat the system as potentially compromised
rather than merely vulnerable.
---
# Incident Response
If exploitation is suspected:
1. Preserve relevant logs.
2. Identify suspicious requests.
3. Review administrator accounts.
4. Review installed plugins.
5. Inspect recently modified PHP files.
6. Inspect `wp-content/uploads/`.
7. Rotate WordPress credentials.
8. Rotate hosting/server credentials where appropriate.
9. Remove unauthorized persistence.
10. Restore trusted application files when necessary.
11. Upgrade the vulnerable plugin.
12. Continue monitoring for re-entry.
---
# Responsible Disclosure
When reporting this vulnerability or derivative research:
* Clearly identify the affected plugin.
* Include the affected version.
* Include the fixed version when confirmed.
* Explain the unauthenticated attack path.
* Document the required prerequisites.
* Provide reproducible evidence in a controlled environment.
* Avoid publishing victim data.
* Never publish generated administrator credentials.
* Never publish live webshell URLs.
---
# Research Limitations
A vulnerable plugin version alone does not guarantee successful
exploitation.
The attack path can be affected by:
* WordPress configuration
* Comment settings
* Event visibility
* Template configuration
* Security plugins
* Web Application Firewalls
* Reverse proxies
* PHP configuration
* Hosting permissions
* Object caching
* Network filtering
Therefore, version fingerprinting should be treated as an initial
indicator rather than definitive proof of exploitability.
---
# Repository Safety
Do not commit:
```text
shells.txt
admins.txt
реальные URL целей
сгенерированные учётные данные
файлы webshell
захваченный вывод phpinfo
дампы баз данных
информация об окружении сервера
приватные тестовые данные```
Use synthetic laboratory targets when creating screenshots,
demonstrations, or documentation.
---
# Recommended Repository Structure
```text
the-events-calendar-poc/
│
├── poc.py
├── README.md
├── LICENSE
├── .gitignore
│
├── screenshots/
│ └── .gitkeep
│
└── docs/
└── research-notes.md```
Keep runtime artifacts outside the repository.
---
# Technical Summary
```text
The Events Calendar
|
v
V2 Single Event Template
|
v
WordPress do_blocks()
|
v
Legacy Widget Block
|
v
Forged Widget Instance
|
v
Valid Integrity Attribute
|
v
is_safe_widget_instance()
|
v
PHP Object Deserialization
|
v
Magic Method Invocation
|
v
PHP Object Injection
|
v
Remote Code Execution```
---
# Severity
**Impact:** Remote Code Execution
**Authentication:** Not required
**Attack Vector:** Remote
**Primary Component:** The Events Calendar
**Primary Vulnerable Functions:**
```text
is_safe_widget_instance()
enable_rendering_widget_copied()```
**Delivery Mechanism:**
```text
Комментарии к событиям
+
URL-адрес модерации WordPress с хешем
+
Отрисовка событий V2```
---
# Key Takeaway
The important aspect of this vulnerability is not simply that the plugin
uses PHP serialization.
The complete unauthenticated attack path is enabled by the combination
of:
```text
Недостаточная проверка виджетов
+
Поведение магических методов PHP
+
Поддельный атрибут integrity
+
do_blocks()
+
Публичные комментарии к событиям
+
Доступ к moderation-hash```
This combination creates an unauthenticated path to PHP Object Injection
and Remote Code Execution.
---
# Credits
Vulnerability details and affected-version information:
**Wordfence Threat Intelligence**
Research PoC:
**The Events Calendar PHP Object Injection / RCE research implementation**
---
# References
* Wordfence Threat Intelligence — The Events Calendar PHP Object
Injection / RCE vulnerability
* The Events Calendar
* WordPress Core
* WordPress Comments
* WordPress Block Editor
* WordPress `do_blocks()`
* PHP Object Serialization / Deserialization
---
# Disclaimer
This repository contains security research concerning a remote-code-
execution vulnerability affecting a WordPress plugin.
The PoC is provided for:
* Security research
* Defensive validation
* Authorized penetration testing
* Controlled laboratory reproduction
* Education
Only test systems that you own or have explicit written authorization
to assess.
The authors are not responsible for unauthorized use of this research.
---
# Keywords
```text
CVE-2026-78006
The Events Calendar
The Events Calendar WordPress
Уязвимость The Events Calendar
The Events Calendar RCE
The Events Calendar PHP Object Injection
WordPress
CVE-2026-78006 POC
Безопасность WordPress
Уязвимость WordPress
WordPress RCE
PHP Object Injection
PHP Deserialization
Unauthenticated RCE
Remote Code Execution
CVE
Безопасность плагинов WordPress
RCE в плагинах WordPress
is_safe_widget_instance
enable_rendering_widget_copied
do_blocks
WordPress comments
moderation hash
legacy-widget
security research
PoC
Proof of Concept
penetration testing```