Events Manager – Calendar, Bookings, Tickets, and more! <= 7.3.6 - Unauthenticated PHP Object Injection
Description
The Events Manager – Calendar, Bookings, Tickets, and more! plugin for WordPress is vulnerable to PHP Object Injection in versions up to, and including, 7.3.6 via deserialization of untrusted input. This makes it possible for unauthenticated attackers to inject a PHP Object. No known POP chain is present in the vulnerable software. If a POP chain is present via an additional plugin or theme installed on the target system, it could allow the attacker to delete arbitrary files, retrieve sensitive data, or execute code.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:HTechnical Details
What Changed in the Fix
Changes introduced in v7.3.7
Source Code
WordPress.org SVN# Exploitation Research Plan: CVE-2026-57713 (Events Manager) ## 1. Vulnerability Summary The **Events Manager** plugin (versions <= 7.3.6) is vulnerable to **Unauthenticated PHP Object Injection**. The vulnerability exists in the handling of a REST API endpoint introduced for Gutenberg block valid…
Show full research plan
Exploitation Research Plan: CVE-2026-57713 (Events Manager)
1. Vulnerability Summary
The Events Manager plugin (versions <= 7.3.6) is vulnerable to **Unauthenticated PHP Object Injection**. The vulnerability exists in the handling of a REST API endpoint introduced for Gutenberg block validation. Specifically, the endpoint /events-manager/v1/blocks/event/validate accepts a form_data parameter which is a serialized string of form inputs. The server-side logic parses this string and subsequently passes the resulting data to functions that perform deserialization (unserialize()) on certain keys without proper validation or using the allowed_classes => false option.
Because the permission_callback for this REST route is either missing or defaults to __return_true, the endpoint is accessible to unauthenticated attackers.
2. Attack Vector Analysis
- Endpoint:
POST /wp-json/events-manager/v1/blocks/event/validate - Vulnerable Parameter:
form_data - Payload Parameter (inside
form_data): Likelyevent_attributesorrecurrence_data. - Authentication: Unauthenticated (PR:N).
- Preconditions: The plugin must be active. The site must have the REST API enabled (default in WordPress).
3. Code Flow
- Registration:
EM_Blocks::init()inblocks/_bootstrap.phpcallsadd_action( 'rest_api_init', [ __CLASS__, 'register_validation_endpoint' ] );. - Route Definition:
EM_Blocks::register_validation_endpoint()(inferred) registers the route/events-manager/v1/blocks/event/validatewithpermission_callback => '__return_true'. - Entry Point: An attacker sends a
POSTrequest to the endpoint withpost_type,post_id, andform_data. - Parsing: The server-side callback parses the
form_datastring (likely usingparse_str()). - Processing: The parsed parameters are used to instantiate or populate an
EM_EventorEM_Locationobject (e.g., via$EM_Event->get_post($params)). - Sink: Inside the object's data handling logic (likely in
classes/em-event.phporclasses/em-location.php), certain fields (e.g.,event_attributesorrecurring_data) are passed tounserialize().
4. Nonce Acquisition Strategy
The vulnerability is reported as Unauthenticated. In the WordPress REST API, if a route's permission_callback returns true, no authentication is required.
- REST Nonce (
_wpnonce): WordPress only enforces the REST nonce check if the request contains authentication cookies (to prevent CSRF against logged-in users). If the request is sent without cookies, the nonce check is skipped for unauthenticated routes. - Action Nonce (
_emnonce): The plugin logic might check for an internal nonce (like_emnonceseen in the JS source). However, if the validation endpoint is intended for draft saves or pre-flight checks, this check may be bypassed or the nonce may be available on the frontend.
Strategy:
- Attempt the exploit without a nonce and without cookies first.
- If the server returns a
403 Forbiddenwith a "rest_cookie_invalid_nonce" error, it means the environment requires a nonce even for unauthenticated users. - To obtain a nonce:
- Create a page with an Events Manager block or shortcode:
wp post create --post_type=page --post_status=publish --post_content='[event_form]' - Navigate to the page and use
browser_evalto extract the nonce:// Example based on common EM localization patterns window.EM?.nonce || window.em_ajax?.nonce
- Create a page with an Events Manager block or shortcode:
5. Exploitation Strategy
Step 1: Verification of Endpoint
Send a benign request to confirm the endpoint exists and is accessible.
- Method:
POST - URL: `/wp-json/events-manager/v1/blocks/
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.