Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify site running My Calendar ≤3.7.6
-
DeliverySend unauthenticated POST to admin-ajax.php (mcjs_action, loadupcoming, args with site=N)
-
Exploitparse_str injects arbitrary site into $args
-
Executionswitch_to_blog() runs without capability check
-
ImpactExtract private events from targeted sub-site (or crash worker on Single Site)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Exploitation requires the My Calendar plugin ≤ 3.7.6 active and reachable at wp-admin/admin-ajax.php, with the request using action=mcjs_action and behavior=loadupcoming plus an args string containing an injected 'site' key (the '|' character is converted to '&' before parse_str, so parameters can be packed into args). No authentication, user interaction, or non-default plugin configuration is needed-the wp_ajax_nopriv_mcjs_action hook exposes it to anonymous users by default. The decisive limiting factor is deployment topology: the cross-tenant information disclosure (reading events from arbitrary sub-sites) only works on WordPress Multisite networks where switch_to_blog() exists; on Single Site installations that function is undefined, so the exact same request yields only an unauthenticated denial of service (500 fatal error) rather than data disclosure. |
| Impact | The signals conflict and should be weighed rather than taken at face value. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N, VC:H/VA:H) and SSVC (Exploitation: poc, Automatable: yes, Technical Impact: total) both point to an easy, scriptable, unauthenticated attack with serious impact-consistent with the 8.8 score. Publicly available exploit code raises practical concern. However, EPSS is only 0.01% (3rd percentile) and the vulnerability is NOT in CISA KEV, indicating no observed mass exploitation to date. The confidentiality impact (cross-tenant event disclosure) applies ONLY to WordPress Multisite deployments, which are a minority of installs; on far more common Single Site installs the impact is limited to DoS, not data theft. So the 'total' technical impact and VC:H are conditional on a Multisite topology. Net: a genuine, low-effort issue worth prompt patching-especially for Multisite hosts and multi-tenant platforms-but the low EPSS and absence from KEV suggest opportunistic rather than widespread active exploitation at this time. |
| Exploit ScenarioDerived | An unauthenticated attacker sends a crafted POST to admin-ajax.php with action=mcjs_action, behavior=loadupcoming, and an args string carrying an injected site parameter (e.g., site=2). On a Multisite network, the plugin switches DB context to sub-site 2 and returns its calendar events-including private ones-in the JSON response, letting the attacker enumerate site IDs and harvest events across tenants. Public exploit code exists and the attack is scriptable/automatable; against a Single Site target the same request instead crashes the PHP worker for an unauthenticated DoS. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 24, 2026
Unauthenticated information disclosure (IDOR) in the My Calendar WordPress plugin (versions ≤ 3.7.6) lets remote attackers read calendar events-including private and hidden ones-from any sub-site on a WordPress Multisite network by injecting an arbitrary site ID into the unauthenticated mcjs_action AJAX endpoint. On Single Site installations the same request triggers an uncaught fatal error, giving an unauthenticated denial-of-service vector. Publicly available exploit code exists, though EPSS remains very low (0.01%) and the flaw is not in CISA KEV. Fixed in version 3.7.7.
RemediationAI
Vendor-released patch: 3.7.7-upgrade the My Calendar plugin to version 3.7.7 or later, which fixes the unvalidated switch_to_blog() call (release: https://github.com/joedolson/my-calendar/releases/tag/v3.7.7; advisory: https://github.com/joedolson/my-calendar/security/advisories/GHSA-2mvx-f5qm-v2ch). If immediate patching is not possible, compensating controls include blocking or restricting unauthenticated access to the wp-admin/admin-ajax.php endpoint for action=mcjs_action at a WAF or reverse proxy-note this may break legitimate front-end 'upcoming events' AJAX loading for anonymous visitors; adding a WAF rule to reject requests whose args parameter contains a 'site' key mitigates the IDOR/switch_to_blog path with less functional impact; and on Single Site installs, rate-limiting admin-ajax.php requests reduces the DoS exposure but does not eliminate the fatal-error trigger. Disabling the plugin entirely is the only complete workaround until 3.7.7 is applied, at the cost of losing calendar functionality.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in composer, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The plugin registers mc_ajax_mcjs_action to the wp_ajax_nopriv_mcjs_action hook, making it reachable by unauthenticated users. When behavior=loadupcoming, the handler takes the attacker-controlled args string and (after sanitize_text_field and a '|'→'&' substitution) passes it directly to PHP's parse_str(), which populates a $args array with arbitrary attacker-supplied key-value pairs. That array flows into my_calendar_upcoming_events() in my-calendar-widgets.php, where a supplied 'site' value is passed straight to WordPress core's switch_to_blog($args['site']) with no capability check (e.g., no Super Admin / manage_network verification). This is a textbook CWE-639 (Authorization Bypass Through User-Controlled Key / IDOR): the sub-site identifier is a direct object reference the application trusts without authorization. The affected component is joedolson/my-calendar (CPE cpe:2.3:a:joedolson:my-calendar:*), and the behavior diverges by deployment: on Multisite, switch_to_blog() exists and changes DB context to the targeted tenant; on Single Site it is undefined, so the call fatals with 'Call to undefined function switch_to_blog()'.
Know when My Calendar gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N
Unauthenticated network endpoint with no UI (AV:N/AC:L/PR:N/UI:N); cross-tenant event disclosure gives C:H and worker crash gives A:H; no integrity impact and shared WordPress app keeps S:U.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
Lifecycle Timeline
4DescriptionGitHub Advisory
My Calendar is a WordPress plugin for managing calendar events. In versions 3.7.6 and below, the mc_ajax_mcjs_action AJAX endpoint, registered for unauthenticated users, passes user-supplied arguments through parse_str() without validation, allowing injection of arbitrary parameters including a site value. On WordPress Multisite installations, this enables an unauthenticated attacker to call switch_to_blog() with an arbitrary site ID and extract calendar events from any sub-site on the network, including private or hidden events. On standard Single Site installations, switch_to_blog() does not exist, causing an uncaught PHP fatal error and crashing the worker thread, creating an unauthenticated denial of service vector. This issue has been fixed in version 3.7.7.
Executive ViewAI
The My Calendar WordPress plugin (versions 3.7.6 and earlier) contains an unauthenticated vulnerability with publicly available exploit code that allows attackers to access private calendar events across WordPress Multisite networks or trigger denial-of-service attacks on single-site installations. Organizations using this plugin face immediate risk of sensitive calendar information disclosure and service disruption without urgent patching.
Vendor-released patch: version 3.7.7. Until patches are applied, disable the My Calendar plugin or restrict network access to the mcjs_action AJAX endpoint to authenticated users only.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
More in My Calendar
View allThe 'My Calendar' WordPress Plugin, version < 3.4.22 is affected by an unauthenticated SQL injection vulnerability in th
The my-calendar plugin before 3.1.10 for WordPress has XSS. Rated medium severity (CVSS 6.1), this vulnerability is remo
The My Calendar WordPress plugin before 3.4.24 does not sanitise and escape some parameters, which could allow users wit
The My Calendar WordPress plugin before 3.2.18 does not sanitise and escape the callback parameter of the mc_post_lookup
Cross-Site Request Forgery (CSRF) vulnerability in Joseph C Dolson My Calendar plugin <= 3.4.3 versions. Rated high seve
Cross-site scripting (XSS) vulnerability in the My Calendar plugin before 1.10.2 for WordPress allows remote attackers t
EUVD-2026-23306
GHSA-2mvx-f5qm-v2ch
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB