
POC for CVE-2026-78006 The Events Calendar <= 6.17.4 - Unauthenticated PHP Object Injection to Remote Code Execution
POC for CVE-2026-78006 The Events Calendar <= 6.17.4 - Unauthenticated PHP Object Injection to Remote Code Execution
#CONTACT telegram for any ask : @soldout0O
If you appreciate my work, consider supporting the project via USDT (TRC20): TQBA72kakjCZLnJt8fJYcD7dyQCEpzNtVN
The Events Calendar for WordPress contains an unauthenticated PHP Object Injection vulnerability that can be chained to Remote Code Execution.
The vulnerable code path involves:
is_safe_widget_instance()enable_rendering_widget_copied()unserialize()do_blocks()Under the documented conditions, an unauthenticated attacker can deliver crafted block markup through an event comment and reach the vulnerable deserialization path before comment moderation occurs.
The vulnerability exists because the plugin's protection around widget instances is insufficient.
The vulnerable flow can be summarized as:
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
Plugin: The Events Calendar
Vulnerability: Unauthenticated PHP Object Injection leading to Remote Code Execution
Affected versions: All versions up to and including 6.17.4, according to the Wordfence advisory.
[!IMPORTANT] The research PoC currently published with this repository identifies itself internally as targeting
<= 6.17.2.The version range stated above follows the Wordfence advisory (
<= 6.17.4). Always verify the exact vulnerable/fixed version against the vendor advisory before testing a deployment.
The vulnerable behavior is associated with the interaction between the widget safety check and PHP's object deserialization behavior.
The key functions involved are:
is_safe_widget_instance()
enable_rendering_widget_copied()
The security check is insufficient because PHP can invoke magic methods during its parsing/deserialization behavior before the intended safety validation provides effective protection.
The chain also relies on the plugin generating a valid integrity value for the supplied widget instance.
One of the most important characteristics of this vulnerability is that the attacker does not need an existing WordPress account.
The attack path abuses the way WordPress exposes a user's own pending comment through a moderation-hash URL.
The relevant conditions are:
Comments enabled
+
Comments visible on events
+
Attacker can submit an event comment
+
V2 single-event template active
After submitting a comment, WordPress can provide an unauthenticated moderation-hash URL that allows the commenter to view their own pending comment.
This creates an unauthenticated delivery mechanism for the crafted block markup.
The attacker submits a comment associated with an event.
The comment does not need to be approved.
The important property is that WordPress can expose the comment through the moderation-hash mechanism.
WordPress provides the commenter with a URL that allows the commenter to view their own pending comment.
This means the attacker can reach the vulnerable rendering path without waiting for moderation.
Conceptually:
POST Comment
|
v
Pending Comment
|
v
Moderation Hash
|
v
Unauthenticated Access
The Events Calendar's V2 single-event template processes the event content and comment-related HTML.
The relevant WordPress processing path eventually reaches:
do_blocks()
This is important because block markup embedded in the rendered content is interpreted as WordPress block data.
The PoC constructs a legacy-widget block containing a serialized widget instance.
The research implementation builds the block using an encoded serialized instance and an integrity attribute.
The vulnerable path ultimately processes this data as a widget instance.
The plugin's enable_rendering_widget_copied() behavior can be abused
to produce a valid integrity attribute for the attacker-controlled
widget data.
This allows the malicious widget instance to pass the expected integrity check and reach the vulnerable processing path.
The vulnerable is_safe_widget_instance() protection is insufficient
against the object supplied through the crafted widget instance.
PHP's object handling behavior can invoke magic methods during the deserialization process.
The result is an exploitable PHP Object Injection primitive.
The research PoC constructs WordPress / The Events Calendar object structures that provide callable behavior during deserialization.
The PoC uses callback-oriented objects and serialized class structures to construct the research payload.
The final impact is Remote Code Execution.
The PoC contains a research webshell stage and administrator-creation logic.
For safe vulnerability verification, the important security boundary is already demonstrated by successful execution of the vulnerable deserialization chain.
The combination of:
Unauthenticated
+
Remote
+
PHP Object Injection
+
RCE
creates a high-impact attack path.
An attacker does not need:
The main environmental prerequisite is that the vulnerable event/comment rendering path is reachable.
The repository contains a Python-based research implementation.
The uploaded PoC is an asynchronous runner around the original research logic.
It uses:
Python
aiohttp
rich
The implementation performs the vulnerability chain through staged payload delivery and verification.
The PoC source describes its architecture as:
payload building
|
v
stage 1
|
v
verification
|
v
stage 2
The research implementation includes functionality for:
The PoC also contains platform-aware checks for Windows and Unix-like environments.
The research tool can be used against an individual authorized WordPress installation.
Conceptually:
Single URL
|
v
Target Discovery
|
v
Event Discovery
|
v
Comment Delivery
|
v
Vulnerability Trigger
|
v
Verification
A single-target workflow is useful for:
The asynchronous runner also supports a list of URLs.
The input format is:
one URL per line
Example:
https://lab-wordpress-01.example
https://lab-wordpress-02.example
https://lab-wordpress-03.example
Blank lines and comments can be ignored.
The runner loads the targets and processes them concurrently using the configured thread/concurrency count.
The PoC supports concurrent processing of multiple targets.
Conceptually:
URL LIST
|
+-----------+-----------+
| | |
v v v
Worker 1 Worker 2 Worker 3
| | |
v v v
Target Target Target
| | |
+-----------+-----------+
|
v
Results
The implementation uses an asynchronous semaphore to control the concurrency level.
The default configured concurrency in the runner is 20.
The asynchronous runner can create two result files:
shells.txt
admins.txt
shells.txt contains discovered uploaded shell URLs.
admins.txt contains administrator result information in the form:
url | user | pass
[!WARNING] These files can contain extremely sensitive credentials and post-exploitation artifacts.
Never publish generated result files to GitHub.
For public vulnerability research, keep these files outside the Git
repository and add them to .gitignore.
.gitignore# PoC results
shells.txt
admins.txt
# Research Workflow
For responsible vulnerability validation:
```text
START
|
v
Verify plugin version
|
v
Verify prerequisites
|
v
Confirm comments are enabled
|
v
Confirm events expose comments
|
v
Reproduce in a lab
|
v
Confirm vulnerable behavior
|
v
Record evidence and logs
|
v
Stop / disclose
Use the minimum level of interaction required to prove the finding.
The Wordfence advisory identifies the following important condition:
Comments must be enabled
and
comments must be visible on events
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.
The PoC contains environment-detection functionality.
The research code attempts to identify information such as:
Operating system
Current execution user
Current working directory
Document root
Server software
HTTP host
PHP information
These values are useful for controlled research and understanding the impact of successful code execution.
The serialized payload contains multiple nested PHP objects.
The research implementation builds structures associated with:
Tribe__Utils__Callback
Tribe\Utils\Element_Classes
stdClass
The serialized structures are then embedded into a WordPress legacy widget block.
Conceptually:
PHP Object Graph
|
v
Serialized Object
|
v
Base64 Encoding
|
v
Legacy Widget Block
|
v
WordPress do_blocks()
|
v
The Events Calendar
|
v
Object Deserialization
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:
Current working directory
Execution user
Document root
Server information
PHP information
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.
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:
Remote Code Execution
+
Persistent WordPress Administrator Access
Administrator credentials generated during research should never be committed to source control.
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.
Successful vulnerability validation can be based on evidence such as:
Plugin version
+
Reachable event
+
Comment delivery
+
Moderation-hash rendering
+
Vulnerable widget processing
+
Controlled execution evidence
For responsible disclosure, collect only the minimum evidence required.
Successful exploitation may allow an unauthenticated attacker to:
The ultimate impact depends on the privileges of the PHP process and the hosting environment.
Defenders should monitor for unusual activity involving:
wp-content/uploads/A compromise investigation should correlate:
Web Server Logs
+
WordPress Logs
+
Database Activity
+
File Integrity
+
Administrator Accounts
Potential indicators include:
Unexpected administrator accounts
Unexpected plugin directories
Unexpected PHP files
Suspicious files in wp-content/uploads/
Unexpected event comments
Abnormal moderation-hash requests
Unexpected widget-related requests
Unexpected PHP execution
Because individual indicators can have legitimate explanations, they should be investigated in context.
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:
If compromise is suspected, treat the system as potentially compromised rather than merely vulnerable.
If exploitation is suspected:
wp-content/uploads/.When reporting this vulnerability or derivative research:
A vulnerable plugin version alone does not guarantee successful exploitation.
The attack path can be affected by:
Therefore, version fingerprinting should be treated as an initial indicator rather than definitive proof of exploitability.
Do not commit:
shells.txt
admins.txt
real target URLs
generated credentials
webshell files
captured phpinfo output
database dumps
server environment information
private test data
Use synthetic laboratory targets when creating screenshots, demonstrations, or documentation.
the-events-calendar-poc/
│
├── poc.py
├── README.md
├── LICENSE
├── .gitignore
│
├── screenshots/
│ └── .gitkeep
│
└── docs/
└── research-notes.md
Keep runtime artifacts outside the repository.
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
Impact: Remote Code Execution
Authentication: Not required
Attack Vector: Remote
Primary Component: The Events Calendar
Primary Vulnerable Functions:
is_safe_widget_instance()
enable_rendering_widget_copied()
Delivery Mechanism:
Event comments
+
WordPress moderation-hash URL
+
V2 event rendering
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:
Insufficient widget validation
+
PHP magic-method behavior
+
Forged integrity attribute
+
do_blocks()
+
Public event comments
+
Moderation-hash access
This combination creates an unauthenticated path to PHP Object Injection and Remote Code Execution.
Vulnerability details and affected-version information:
Wordfence Threat Intelligence
Research PoC:
The Events Calendar PHP Object Injection / RCE research implementation
do_blocks()This repository contains security research concerning a remote-code- execution vulnerability affecting a WordPress plugin.
The PoC is provided for:
Only test systems that you own or have explicit written authorization to assess.
The authors are not responsible for unauthorized use of this research.
CVE-2026-78006
The Events Calendar
The Events Calendar WordPress
The Events Calendar vulnerability
The Events Calendar RCE
The Events Calendar PHP Object Injection
WordPress
CVE-2026-78006 POC
WordPress Security
WordPress Vulnerability
WordPress RCE
PHP Object Injection
PHP Deserialization
Unauthenticated RCE
Remote Code Execution
CVE
WordPress Plugin Security
WordPress Plugin RCE
is_safe_widget_instance
enable_rendering_widget_copied
do_blocks
WordPress comments
moderation hash
legacy-widget
security research
PoC
Proof of Concept
penetration testing