CVE-2026-15070: Salon Booking System WordPress Plugin Remote Code Execution via CSRF
The Salon Booking System plugin for WordPress contains a critical flaw that allows attackers to execute malicious code on vulnerable websites. An attacker can craft a deceptive link that, when clicked by a site administrator, injects harmful PHP code into a plugin file. This happens because the plugin fails to properly validate requests before making changes, and its input filtering doesn't block the special characters needed to break out of safe code boundaries. No authentication is required from the attacker's side—only social engineering to get an admin to click the link.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 8.8 HIGH · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
- Weaknesses (CWE)
- CWE-352
- Affected products
- 0 configuration(s)
- Published / Modified
- 2026-07-10 / 2026-07-10
NVD description (verbatim)
The Salon Booking System – Free Version plugin for WordPress is vulnerable to Cross-Site Request Forgery in all versions up to, and including, 10.30.32. This is due to missing or incorrect nonce validation on the setCustomText function. This makes it possible for unauthenticated attackers to inject arbitrary PHP code into the web-accessible translate-constants.php file within the plugin directory, enabling remote code execution on the server via a forged request granted they can trick a site administrator into performing an action such as clicking on a link. sanitize_text_field() is applied to the POST 'value' parameter but does not neutralize the characters — single quotes, parentheses, semicolons, $, and [] — required to break out of the PHP string literal into which the value is interpolated before being written to disk via file_put_contents().
6 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
CVE-2026-15070 is a Cross-Site Request Forgery (CSRF) vulnerability combined with insufficient input sanitization in the Salon Booking System – Free Version plugin for WordPress (all versions up to 10.30.32). The setCustomText function lacks proper nonce validation, allowing unauthenticated attackers to submit forged POST requests that write arbitrary content to translate-constants.php. Although sanitize_text_field() is applied to the 'value' parameter, it fails to neutralize characters critical to PHP syntax escape (single quotes, parentheses, semicolons, dollar signs, and square brackets). This permits attackers to break out of the intended string literal context and inject executable PHP code, which is then persisted to disk via file_put_contents() and executed server-side. The attack requires user interaction (UI:R) but no privilege escalation.
Business impact
Remote code execution on affected WordPress sites creates severe operational and security risk. Attackers gain the ability to modify site content, exfiltrate sensitive data, install backdoors, deface the website, or pivot to other systems on the network. For businesses operating salons or service-based platforms relying on this booking plugin, compromise could lead to customer data theft (payment information, personal details), service disruption, regulatory penalties under data protection laws, and reputational damage. The ease of exploitation via social engineering means the threat is not theoretical—attackers need only deceive one administrator to gain full server access.
Affected systems
WordPress installations with the Salon Booking System – Free Version plugin version 10.30.32 and earlier are vulnerable. The plugin is publicly available in the WordPress plugin repository, making any site using it a potential target. No minimum WordPress version requirement is specified in the advisory, but vulnerability affects the plugin component directly. Sites where administrators are security-conscious and unlikely to click suspicious links face reduced—but not eliminated—risk.
Exploitability
Exploitability is high. The vulnerability requires no authentication and presents a low attack complexity; the attacker simply crafts a URL or HTML form that triggers the vulnerable function. The primary barrier is social engineering: convincing a site administrator to click a malicious link while logged in. Given the prevalence of phishing and credential compromise, this is a realistic threat. The attack is not dependent on any special network conditions (network is unchanged in impact); it works across any network boundary. Proof-of-concept construction is straightforward once nonce validation absence is confirmed.
Remediation
Immediate action: Update the Salon Booking System plugin to a patched version released after July 10, 2026. Check the vendor's release notes to verify the version fixes the CSRF and sanitization issues. Verify against the vendor advisory for the exact patched version number. Temporary mitigation (if an immediate patch is unavailable): Disable the plugin or restrict access to wp-admin via IP allowlist to reduce the window of social engineering success. Long-term: Enforce security best practices including regular plugin updates, removal of unused plugins, principle of least privilege for admin accounts, and security awareness training for administrators on phishing and malicious links.
Patch guidance
1. Log into your WordPress dashboard and navigate to Plugins > Installed Plugins. 2. Locate the Salon Booking System plugin and check the current version number. 3. If version is 10.30.32 or lower, update immediately by clicking 'Update Now' if available, or deactivate and uninstall the plugin pending a patch release. 4. After updating, verify the new version number matches the vendor's published fix (confirm against vendor release notes). 5. Test booking functionality on a staging environment before deploying to production. 6. Document the update in your change management system with the CVE number for audit purposes.
Detection guidance
Monitor for suspicious activity targeting wp-admin directories, especially requests to files related to the Salon Booking System plugin. Check server logs and WAF rules for POST requests to endpoints containing 'setCustomText' or attempts to write to translate-constants.php. Review recent changes to that file: unexpected PHP code, variable names with $, or syntax that doesn't match your booking system's normal operations may indicate exploitation. Examine WordPress user audit logs for admin actions that you did not authorize, particularly settings changes. If available, enable WordPress security plugins (e.g., Wordfence, Sucuri) that log POST request anomalies and file modifications. Conduct a code review of translate-constants.php for any injected PHP functions or suspicious includes.
Why prioritize this
This vulnerability merits immediate attention due to the combination of high CVSS score (8.8), remote code execution impact, low attack complexity, and lack of authentication requirements. Although user interaction is required, social engineering is a proven attack vector. The prevalence of WordPress and plugin installations means the vulnerable user base is substantial. The absence of KEV status does not diminish urgency; it reflects current lack of public active exploitation tracking, not reduced risk. Organizations with salons, service businesses, or public-facing WordPress sites using this plugin should treat this as a critical patch deadline.
Risk score, explained
CVSS 3.1 score of 8.8 (HIGH) reflects: AV:N (network-accessible, no special positioning needed), AC:L (low attack complexity, standard CSRF + form submission), PR:N (no privileges required), UI:R (user interaction required, the social engineering component), S:U (scope unchanged), and C:H/I:H/A:H (confidentiality, integrity, and availability all highly impacted by remote code execution). The score appropriately penalizes the social engineering requirement but recognizes that code execution on a web server is a maximum-severity impact. High does not mean 'patch eventually'—it means 'prioritize within days, not weeks.'
Frequently asked questions
Do I need to be logged in as an administrator to be attacked?
No. The attacker does not need admin credentials. However, the attacker must trick an administrator into clicking a malicious link while that administrator is logged into WordPress. The CSRF aspect exploits the trust relationship—the administrator's browser automatically includes session cookies in the forged request.
What if my site has no sensitive data—does this vulnerability still matter?
Yes. Even if your booking system stores no payment data, a compromised server can be used to host malware, send spam, participate in botnet attacks, or serve malicious content to your customers. The server itself becomes the asset at risk, regardless of what data it holds.
The plugin is free and open-source—can I patch it myself?
In theory, you could manually edit the plugin code to add nonce validation and proper sanitization, but this is not recommended. Custom patches become difficult to maintain across WordPress updates and may introduce new vulnerabilities. Wait for the vendor's official patch to ensure the fix is tested and compatible.
How long does the vendor typically take to release a security patch?
This varies by vendor and severity. Given the HIGH CVSS score and public disclosure (July 10, 2026), monitor the vendor's GitHub repository and security advisories closely. If no patch is available within 7 days, strongly consider disabling the plugin and switching to an alternative booking solution.
This analysis is based on publicly disclosed information as of July 10, 2026, and reflects the vulnerability as reported. SEC.co does not host or verify the affected plugin code directly. Organizations should validate all guidance against the official vendor advisory and test patches in non-production environments before deployment. The presence or absence of KEV status does not indicate active exploitation in the wild. Consult your security operations team and vendor documentation for environment-specific guidance. This page is for informational purposes and does not constitute legal or compliance advice. Source: NVD (public-domain), retrieved 2026-08-17. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2025-68052HIGHUnauthenticated CSRF in Eagle Booking ≤1.3.4.3 – Patch Guidance
- CVE-2026-11265HIGHGoogle Chrome Autofill Cross-Origin Data Leak (CVSS 7.5)
- CVE-2026-12158HIGHRegistrationMagic CSRF Privilege Escalation Vulnerability – WordPress Plugin Security
- CVE-2026-12740HIGHOAuth 2.0 State Parameter Missing in Plack::Middleware::OAuth – Account Takeover Risk
- CVE-2026-12746HIGHDancer2 OAuth 2.0 State Parameter Missing – Account Takeover Risk
- CVE-2026-22342HIGHWordPress Dating Theme CSRF Vulnerability – High-Risk Patch Required
- CVE-2026-34171HIGHCoolify Password Reset CSRF Vulnerability (v4.0.0-beta.470 and Earlier)
- CVE-2026-35266HIGHOracle REST Data Services Authentication & Data Integrity Vulnerability