Appointment Booking Calendar — Simply Schedule Appointments Booking Plugin <= 1.6.12.4 - Missing Authorization
Description
The Appointment Booking Calendar — Simply Schedule Appointments Booking Plugin plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 1.6.12.4. This makes it possible for unauthenticated attackers to perform an unauthorized action.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:NTechnical Details
<=1.6.12.4What Changed in the Fix
Changes introduced in v1.6.12.6
Source Code
WordPress.org SVN# Exploitation Research Plan - CVE-2026-57812 ## 1. Vulnerability Summary **CVE-2026-57812** is a Missing Authorization vulnerability in the **Simply Schedule Appointments (SSA)** plugin (versions <= 1.6.12.4). The vulnerability exists because certain REST API endpoints (specifically those handling…
Show full research plan
Exploitation Research Plan - CVE-2026-57812
1. Vulnerability Summary
CVE-2026-57812 is a Missing Authorization vulnerability in the Simply Schedule Appointments (SSA) plugin (versions <= 1.6.12.4). The vulnerability exists because certain REST API endpoints (specifically those handling notices and templates) fail to perform adequate capability checks.
The CHANGELOG.md for version 1.6.12.0 mentions an attempt to "tighten notices/templates REST auth" and "Remove public-nonce fallback." This indicates that these endpoints previously accepted a "public nonce" (intended for unauthenticated booking interactions) as a valid authorization token for administrative actions. The existence of this CVE up to version 1.6.12.4 suggests the fix was incomplete or specific endpoints were overlooked.
2. Attack Vector Analysis
- Endpoint:
/wp-json/ssa/v1/noticesor/wp-json/ssa/v1/templates - HTTP Method:
GET(for information exposure) andPOST/PUT/DELETE(for unauthorized modification). - Authentication: Unauthenticated.
- Authorization: The attacker leverages the
public_nonceprovided to all users on pages where the SSA booking form is present. - Preconditions: At least one page must contain the SSA booking shortcode
[ssa_booking]to expose the public nonce.
3. Code Flow
- The plugin initializes various API handlers in
simply-schedule-appointments.php(e.g.,$this->notices_api,$this->templates_api). - These classes register REST routes under the
ssa/v1namespace usingregister_rest_route. - The
permission_callbackfor these routes likely checks if the user is an administrator OR if a validpublic_nonceis provided in theX-WP-Nonceheader or_wpnonceparameter. - In the vulnerable version, endpoints like
noticesstill permit thepublic_noncefallback, allowing unauthenticated users to perform actions like dismissing administrative notifications or modifying templates.
4. Nonce Acquisition Strategy
The "public nonce" is required for the REST API to accept requests from the frontend booking app.
- Trigger Script Loading: SSA enqueues its scripts and localizes data on any page containing the booking shortcode.
- Create Page:
wp post create --post_type=page --post_title="Booking" --post_status=publish --post_content='[ssa_booking]' - Extract Nonce:
Navigate to the newly created page and usebrowser_evalto extract the nonce from the global configuration object.- JS Variable:
window.SSA_Booking(inferred from SSA source patterns). - Nonce Key:
nonceorpublic_nonce. - Command:
browser_eval("window.SSA_Booking?.nonce")
- JS Variable:
5. Exploitation Strategy
We will attempt to unauthentically access and modify the plugin's "Notices" (administrative messages), which fits the "Missing Authorization" and "Low Integrity Impact" (CVSS 5.3) profile.
Step 1: Discover Existing Notices
- Request:
GET /wp-json/ssa/v1/notices - Headers:
X-WP-Nonce: [EXTRACTED_NONCE] - Goal: List all administrative notices. If successful, this confirms the missing authorization on the
GEThandler.
Step 2: Perform Unauthorized Action (Dismiss Notice)
- Request:
POST /wp-json/ssa/v1/notices/dismiss(or similar endpoint identified in Step 1) - Payload:
{"notice_id": "some-id"} - Headers:
Content-Type: application/json,X-WP-Nonce: [EXTRACTED_NONCE] - Goal: Dismiss an admin notice as an unauthenticated user.
Step 3: Modify Templates (Optional/Alternative)
- Request:
GET /wp-json/ssa/v1/templates - Goal: View email/notification templates to confirm broad authorization bypass.
6. Test Data Setup
- Plugin Installation: Install SSA version 1.6.12.4.
- Generate a Notice: Ensure there is at least one active notice in the SSA dashboard (e.g., by not completing the setup wizard or inducing a minor configuration warning).
- Public Page: Create a page with the shortcode
[ssa_booking]at the slug/booking-page.
7. Expected Results
- The
GET /wp-json/ssa/v1/noticesrequest should return a200 OKwith a JSON array of notices, even though the request is unauthenticated. - The
POSTrequest to dismiss or modify a notice should return200 OKand the notice should no longer appear in the admin dashboard.
8. Verification Steps
- Verify via WP-CLI:
Check the database for dismissed notices (often stored inwp_optionsunderssa_settingsorssa_dismissed_notices):wp option get ssa_dismissed_notices - Verify via Admin UI: Log in as an admin and verify that the targeted notice has disappeared from the "Simply Schedule Appointments" dashboard.
9. Alternative Approaches
If the notices endpoint is already partially patched, target the templates or support_status endpoints:
GET /wp-json/ssa/v1/templatesGET /wp-json/ssa/v1/support_statusPOST /wp-json/ssa/v1/settings(Check if the "Unauthenticated settings exposure" fix from 1.6.11.0 was regressed or incomplete).
If window.SSA_Booking is not the correct variable, search the page source for wp-json/ssa/v1 to find the localization script. Look for keys like rest_nonce, public_nonce, or ssa_nonce.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.