CVE-2026-32557
Executive Summary
CVE-2026-32557 is an unauthenticated SQL injection vulnerability affecting the WooCommerce Appointments plugin for WordPress, in all versions up to and including 5.3.2. Because no authentication is required, any remote attacker able to reach a vulnerable WordPress site running this plugin can send crafted requests that are concatenated into a backend SQL query without adequate sanitization or parameterization. Successful exploitation permits direct interaction with the site's database with a confidentiality impact rated High — enabling extraction of user records, password hashes, and arbitrary stored data — with a limited availability impact and a CVSS base score of 9.3.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability is classified as CWE-89 (Improper Neutralization of Special Elements used in an SQL Command, i.e., SQL Injection). The affected software is the WooCommerce Appointments plugin, a booking and scheduling extension that integrates with WooCommerce. The NVD description is deliberately sparse: it states only that an unauthenticated SQL injection exists in versions "<= 5.3.2" and provides no function names, endpoint paths, or parameter names. Accordingly, this analysis is confined to what is derivable from the description and the assigned CVSS vector; no specific code constructs are asserted.
The CVSS v3.1 vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:L, which can be decomposed as follows:
- AV:N (Attack Vector: Network) — the flaw is exploitable remotely over the network, consistent with a web-facing WordPress plugin handling HTTP requests.
- AC:L (Attack Complexity: Low) — no special preconditions, race conditions, or specialized knowledge are required beyond a crafted request. Exploitation is repeatable and deterministic.
- PR:N (Privileges Required: None) — no authentication is needed, matching the "Unauthenticated" designation in the description. This is the most consequential characteristic: the attacker does not need an account, session, or API key.
- UI:N (User Interaction: None) — no victim must click, visit, or approve anything for exploitation to succeed.
- S:C (Scope: Changed) — the vulnerability affects resources beyond the primary security authority of the vulnerable component. In a WordPress context this reflects that successful injection can compromise the database tier and data belonging to the broader application, not merely the plugin's own component boundary.
- C:H (Confidentiality: High) — significant data read access. For a WordPress/WooCommerce install this encompasses
wp_userspassword hashes, customer and order records, API keys stored in options, and any other database-resident data — a complete confidentiality loss of database contents. - I:N (Integrity: None) — the vector assigns no integrity impact, indicating the exploit path in the assessed scenario is read-oriented rather than data-modifying.
- A:L (Availability: Low) — limited availability impact, consistent with resource consumption from heavy or repeated query execution rather than guaranteed destruction of data.
The unauthenticated nature of the flaw is the central risk driver. WooCommerce Appointments has historically exposed several front-end AJAX actions and REST endpoints intended to be reachable by unauthenticated visitors, because booking flows must function for anonymous site visitors. A SQL injection in such a path is reachable directly from the public internet without any prerequisite foothold, which is why the vector assigns PR:N. The "Changed" scope reflects that the vulnerable plugin code serves as the entry point, but the impact is registered against the underlying database and the wider WordPress application.
Because the description names no specific injection point, the exact sink — whether the unsanitized user-supplied value is concatenated into a query in a $wpdb call, passed through an unsafe prepare() usage, or embedded in a legacy query string — cannot be stated without speculation. What is determinable is the class: a user-controllable value reaches SQL statement construction without proper neutralization (missing prepared-statement binding or esc_sql/$wpdb->prepare() usage), permitting the attacker to alter query logic.
Exploitation Scenarios
No public proof-of-concept, exploit code, or Nuclei template is available for CVE-2026-32557, and no proof-of-concept status beyond "None" is recorded. The attack chain below is therefore described at the vulnerability-class level, strictly bounded by the NVD description. No specific endpoint, parameter, or function name is asserted, because none is present in the source data.
1) Reconnaissance / target identification. An attacker enumerates internet-exposed WordPress installations and fingerprints the presence of the WooCommerce Appointments plugin. This can be performed passively via search engines, by inspecting publicly served plugin asset paths, or via active scanning for the distinctive request or markup patterns emitted by the booking feature. The attacker identifies sites running a version at or below 5.3.2, which — per the description — are all vulnerable.
2) Triggering the flaw. The injection is reachable without authentication. The attacker sends a crafted HTTP request to the vulnerable component, supplying a value that is neither parameterized nor sufficiently sanitized before it is placed into a SQL statement. Because the flaw class is CWE-89, the injection point accepts, at minimum, a string that is incorporated into query logic. At the class level, this typically involves injecting SQL syntax such as boolean conditions or comment sequences to alter the semantics of the underlying query — for example, changing a WHERE clause so that it evaluates true for rows the requester is not entitled to see.
3) Payload / execution method (vulnerability-class level). The payload is delivered in the request body, query string, or another HTTP-transmitted field consumed by the vulnerable component, depending on where the unparameterized query is constructed. From the available data it is not possible to specify the transport or encoding. The injected tokens are interpreted by the database engine as SQL rather than as inert data, which is the defining condition of CWE-89. Attackers commonly leverage error-based, boolean-based, time-based, or UNION-based techniques, each of which achieves the same end: controlling part of the executed query.
4) Post-exploitation impact. Given the C:H rating, the primary outcome is exfiltration of database contents. On a WordPress installation this includes user account records and password hashes, WooCommerce customer and order data (names, addresses, order history), configured API credentials stored in the options table, and any other sensitive rows. The A:L score indicates a possible limited availability impact. The vector assigns no integrity impact, so data modification via this specific exploit path is not assessed as part of the tracked severity. The Scope:Changed rating means the compromise reaches beyond the plugin itself into the shared database and the broader site.
Limitations. Without a disclosed injection point, parameters required by any exploit attempt (transport method, field name, required headers) cannot be enumerated. Any such enumeration here would be fabrication, and it is deliberately omitted.
Impact Assessment
The business impact centers on the loss of confidentiality of a production e-commerce site's database. Because the injection requires no authentication, the exploitability barrier is essentially zero — the only prerequisite is network reachability to a WordPress instance running WooCommerce Appointments 5.3.2 or earlier with the vulnerable component exposed.
Blast radius considerations:
- Credential compromise. WordPress stores password hashes for all users, including administrators. Exfiltration of these hashes enables offline cracking, which in turn enables full administrative takeover of the WordPress site — potentially a worse outcome than the initial data exposure, since admin access permits arbitrary plugin/theme upload and thus remote code execution.
- Customer and order data. WooCommerce stores customer personally identifiable information and order records, implicating data-protection obligations (e.g., GDPR) and creating notification costs, regulatory exposure, and reputational damage.
- API keys and secrets. A typical WooCommerce site stores payment gateway keys, shipping API credentials, and similar secrets in the database; their exposure can pivot risk into payment or fulfillment systems.
- Lateral movement. The shared database host may serve multiple virtual hosts, so a database-level reach extends the incident beyond a single application.
CVSS subscores reflecting severity: Attack Vector Network, Attack Complexity Low, Privileges Required None, User Interaction None, Scope Changed, Confidentiality High, Integrity None, Availability Low — combining to a 9.3 Critical base score. The absence of an integrity component in the vector does not eliminate downstream integrity risk (e.g., admin account takeover following hash cracking), but that is a second-order effect rather than a scored property of the vulnerability.
No exploit-in-the-wild telemetry, threat-actor attribution, or CISA KEV listing exists for this CVE at the time of writing. CISA KEV status is NO, meaning it is not a known exploited vulnerability per that catalog, and EPSS has not yet been scored by FIRST.org — no EPSS estimate should be assumed.
Detection Guidance
The detections below target the vulnerability class (unauthenticated SQL injection against a WordPress plugin) rather than a specific known payload, since no public exploit or Nuclei template exists. They should be tuned against baseline traffic, as WordPress and WooCommerce generate substantial legitimate query-string and POST noise.
Sigma Rule
title: Potential Unauthenticated SQL Injection Against WooCommerce Appointments
id: 8f2c1a44-7b6e-4d21-9c3a-5a1b2c3d4e5f
status: experimental
description: Detects SQL injection indicators in HTTP requests targeting WordPress sites running the WooCommerce Appointments plugin (<= 5.3.2, CVE-2026-32557).
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-32557
author: valtersit.com
date: 2026/01/01
logsource:
category: webserver
detection:
selection_method:
cs-method:
- GET
- POST
selection_sqli_patterns:
cs-uri-query|contains:
- "' OR "
- "' OR 1=1"
- "' AND 1=1"
- "UNION SELECT"
- "UNION ALL SELECT"
- "SLEEP("
- "BENCHMARK("
- "information_schema"
- "CONCAT("
- "-- -"
- "'--"
- "'#"
- "' OR SLEEP"
selection_wp_context:
cs-uri-query|contains:
- "wp-admin/admin-ajax.php"
- "wp-json"
- "wc-appointments"
# Also inspect request bodies where the web server logs them
selection_body_sqli:
cs-uri-query|contains:
- "%27%20OR"
- "%27%20AND"
- "%55NION%20SELECT"
condition: selection_method and (selection_sqli_patterns or selection_body_sqli)
falsepositives:
- Security scanners
- Legitimate search queries containing SQL-like keywords
level: high
tags:
- attack.initial_access
- attack.t1190
- cve.2026.32557
YARA Rule
rule CVE_2026_32557_WooCommerce_Appointments_SQLi
{
meta:
description = "Detects SQL injection payloads targeting unauthenticated WordPress plugin endpoints (WooCommerce Appointments <= 5.3.2, CVE-2026-32557)"
author = "valtersit.com"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-32557"
date = "2026-01-01"
severity = "critical"
strings:
$sqli_union = "UNION SELECT" nocase
$sqli_union2 = "UNION ALL SELECT" nocase
$sqli_bool = "' OR 1=1" nocase
$sqli_bool2 = "' AND 1=1" nocase
$sqli_sleep = "SLEEP(" nocase
$sqli_bench = "BENCHMARK(" nocase
$sqli_is = "information_schema" nocase
$sqli_comment = "'-- " nocase
$sqli_wp1 = "admin-ajax.php"
$sqli_wp2 = "wc-appointments"
$sqli_wp3 = "woocommerce-appointments"
condition:
(
any of ($sqli_union, $sqli_union2, $sqli_bool, $sqli_bool2,
$sqli_sleep, $sqli_bench, $sqli_is, $sqli_comment)
)
or
(
2 of ($sqli_wp1, $sqli_wp2, $sqli_wp3)
)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-32557 Possible Unauthenticated SQL Injection in WooCommerce Appointments"; flow:established,to_server; http.method; content:"GET"; http.method; content:"POST"; http.uri; content:"admin-ajax.php"; nocase; http.uri; content:"wc-appointments"; nocase; http.uri; pcre:"/(\%27)|(')|(\%22)|(\bOR\b\s+\d=\d)|(UNION\s+(ALL\s+)?SELECT)|(SLEEP\()|(BENCHMARK\()|(information_schema)/i"; classtype:web-application-attack; reference:cve,2026-32557; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-32557; sid:100032557; rev:1; metadata:created_at 2026_01_01, updated_at 2026_01_01, confidence Low;)
Note: because no public exploit exists, this is a heuristic signature and may require tuning to reduce false positives.
Elastic Detection
sequence by source.ip with maxspan=30s
[network where network.protocol == "http" and
url.path : ("*admin-ajax.php*", "*wp-json*", "*wc-appointments*") and
url.query : ("*UNION SELECT*", "*' OR *", "*SLEEP(*", "*BENCHMARK(*", "*information_schema*")]
[network where network.protocol == "http" and
url.path : ("*admin-ajax.php*", "*wp-json*", "*wc-appointments*") and
http.response.status_code == 200]
Event-category and field names should be aligned to the deployed Elastic integration (e.g., packetbeat, filebeat, or Elastic Defend network events).
Splunk SPL Query
index=web OR index=proxy
| eval uri=lower(coalesce(uri, url, request_url, ""))
| where match(uri, "(urllib|%27|'|\")\s*(or|and)\s+\d=\d")
OR match(uri, "(union(\s+all)?\s+select)")
OR match(uri, "(sleep|benchmark)\(")
OR match(uri, "information_schema")
| where match(uri, "admin-ajax\.php") OR match(uri, "wp-json") OR match(uri, "wc-appointments") OR match(uri, "woocommerce-appointments")
| stats count min(_time) as first_seen max(_time) as last_seen values(uri) as uris by src_ip, dest_ip, host, status
| where count >= 1
| sort - count
Wazuh OSSEC Rule
<group name="web,appsec,wordpress,">
<rule id="100257" level="12">
<if_sid>31100,31101,31103,31104,31106,31108</if_sid>
<field name="url">admin-ajax.php|wp-json|wc-appointments|woocommerce-appointments</field>
<regex type="pcre2">(?i)(%27|')(\s)*(or|and)(\s)+\d=\d|union(\s+all)?\s+select|sleep\(|benchmark\(|information_schema</regex>
<description>CVE-2026-32557: Possible unauthenticated SQL injection attempt against WooCommerce Appointments (wordpress plugin)</description>
<mitre>
<id>T1190</id>
</mitre>
<group>sql_injection,attack,cve_2026_32557,</group>
</rule>
<rule id="100258" level="10">
<if_sid>100257</if_sid>
<field name="id">^4\d\d$|^5\d\d$</field>
<description>CVE-2026-32557: SQL injection attempt received server error response - possible successful trigger or blind probe</description>
<group>sql_injection,attack,cve_2026_32557,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence is 0/4: there is no patch evidence from any tracked source, no vendor fix, no affected-version diff data, and no listed workarounds. The following guidance is therefore organized around defensive controls rather than a confirmed update path.
1) Immediate mitigations (no vendor patch available).
- Virtual patching at the WAF/edge. Deploy request inspection to block SQL metacharacters and SQL-injection patterns (
',UNION SELECT,OR 1=1,SLEEP(,BENCHMARK(,information_schema) on requests routed to WordPress AJAX, REST, and booking endpoints. This is the most effective immediate control given there is no upstream fix. Note that WAF rules for this CVE are heuristic, because no public exploit defines the exact payload shape. - Restrict exposure of the booking endpoint. If the WooCommerce Appointments booking workflow is not required for anonymous visitors, disable or firewall off the relevant front-end booking functionality, or require authentication where the feature allows it. Limit access to the affected endpoints by IP where operationally feasible.
- Network segmentation of the database. Ensure the WordPress database is not reachable beyond the web tier, limiting the reach of any injection to the database contents themselves rather than pivoting to other hosts.
- Monitor and rate-limit. Apply aggressive rate-limiting and alerting to anomalous query patterns against the plugin's endpoints, so that blind injection probing (time-based or boolean-based) is caught early.
2) Patch/upgrade steps.
- There is currently no fixed version to upgrade to. All versions
<= 5.3.2remain vulnerable per the NVD description. - Track the vendor (WooCommerce / WooCommerce Appointments maintainers) for an advisory and a fixed release. Because no CNA title or vendor advisory is present in the source data, verify the official plugin distribution channel for any security release.
- When a patched version becomes available, test it in staging and deploy promptly; given the CVSS 9.3 severity and unauthenticated access, treat the update as emergency priority.
- If the plugin is unused, remove it entirely — an unmaintained booking plugin with a critical unpatched SQLi is a persistent liability.
3) Long-term hardening.
- Rotate secrets. Given the C:H rating and the risk that database contents are exfiltrated, assume that any credentials stored in the WordPress database (password hashes, payment gateway and shipping API keys) may be compromised; rotate them and force password resets for all accounts.
- Least-privilege database account. Run WordPress with a database user limited to the operations it genuinely requires, minimizing the options available to an injected query.
- Inventory and vulnerability management. Maintain an inventory of WordPress plugins and versions, and integrate CVE feeds so that unauthenticated critical vulnerabilities are detected quickly.
- Defense in depth. Keep WordPress core and all other plugins updated, enable MFA on administrator accounts, and deploy logging that captures full request URIs and bodies for the booking endpoints so that exploitation attempts are detectable and investigable.
- WAF coverage validation. Regardless of a future patch, retain the SQL-injection detection rules above as a backstop, since protection against this vulnerability class is broadly useful across the WordPress ecosystem.
References
- NVD — CVE-2026-32557: https://nvd.nist.gov/vuln/detail/CVE-2026-32557
- CWE-89 — Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection'): https://cwe.mitre.org/data/definitions/89.html
- FIRST.org EPSS — CVE-2026-32557 scoring status (not yet scored): https://api.first.org/data/v1/epss?cve=CVE-2026-32557
- CISA Known Exploited Vulnerabilities Catalog (CVE-2026-32557 not listed): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- MITRE ATT&CK T1190 — Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.