A store clerk who hands out the unreleased catalog to anyone who asks nicely
The Product Configurator for WooCommerce plugin exposes an AJAX/REST endpoint (pc_get_data) that returns product data without checking either the caller's capability *or* the target post's status. All versions prior to 1.7.3 are affected. That means an unauthenticated visitor can enumerate product IDs and pull back data on posts that WordPress considers draft, pending, private, or future — content that the storefront would never render to a logged-out visitor.
There is no vendor CVSS on record, so this is a first-pass assessment. WPScan tags it at 7.5 High, but that anchoring is generous for a pure information-disclosure bug with no path to code execution, no session takeover, and no PII exposure by default. The leak matters — competitors and pre-launch leak sites will love it — but on the standard confidentiality/integrity/availability axis it is C-only, and the affected data is business-sensitive rather than personal or credential-bearing. MEDIUM is the honest bucket.
4 steps from start to impact.
Locate a vulnerable storefront
Product Configurator plugin via the /wp-content/plugins/product-configurator-for-woocommerce/ asset path, plugin readme, or the presence of the pc_get_data action. Standard mass-scanning with httpx + nuclei templates picks these up in bulk.- Public-facing WordPress storefront
- Plugin active with version < 1.7.3
- Niche plugin — WordPress.org active install count is small (low thousands range)
- Some deployments hide plugin paths behind Cloudflare/WAF
Invoke pc_get_data unauthenticated
admin-ajax.php?action=pc_get_data (or the plugin's REST route) supplying a product ID. The handler skips both current_user_can() and any get_post_status() gate, returning the serialized product data regardless of publication state.- Reachable /wp-admin/admin-ajax.php
- Knowledge or enumeration of product IDs (sequential integers)
- Rate-limiting WAFs will throttle enumeration
- Some hosts block direct admin-ajax from external IPs
Enumerate the draft/private catalog
post_status != publish. This yields unreleased SKUs, pricing tiers, hidden variants, embargoed launches, and any custom fields the configurator stores (BOM data, cost inputs, supplier notes).- Endpoint returns data for non-published posts
- Custom fields populated on draft records
- Sites that use the plugin only for public catalogs have nothing juicy in draft state
Monetize the leak
- Draft records contain business-sensitive fields
- Impact is business-competitive, not security-catastrophic — most sites store nothing worse than SKU + price in drafts
The supporting signals.
| In-the-wild exploitation | None observed as of assessment date. Not on CISA KEV. |
|---|---|
| Public PoC | No dedicated PoC repo published; the bug is trivial (single unauth request to pc_get_data) and effectively self-documenting from the WPScan advisory. |
| EPSS | Not yet scored (CVE published 2026-07-01). Expect a low-single-digit percentile — niche plugin, disclosure-only impact. |
| KEV status | Not listed. |
| CVSS vector | No official vector. WPScan working score 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N). Reassessed here as 5.3 (C:L — data leaked is business-sensitive, not credential/PII). |
| Affected versions | Product Configurator for WooCommerce < 1.7.3 |
| Fixed version | 1.7.3 (adds capability + post_status gate on pc_get_data) |
| Installed base | Low — WordPress.org active install count in the low thousands. Not a top-100 WooCommerce plugin. Shodan/Publicwww fingerprints return correspondingly small populations. |
| Disclosure date | 2026-07-01 |
| Reporter | Credited via WPScan disclosure program (see advisory). |
noisgate verdict.
The single decisive factor is impact ceiling: this is a pure confidentiality leak of draft/private product records — no RCE, no auth bypass, no customer PII, no path to admin. Combined with a small install base (low-thousands range on WordPress.org), the realistic worst case is competitive-intel exposure, not fleet or identity compromise, which places the verdict squarely in MEDIUM.
Why this verdict
- Unauthenticated + network-reachable: exploitation friction is essentially zero — a single HTTP request against
admin-ajax.php. That keeps this out of LOW territory. - Confidentiality-only impact: the endpoint returns product metadata. No writes, no privilege escalation, no session material. That is the primary reason this does not sit at HIGH.
- Role multiplier — public storefront: the affected component runs on a merchant web tier. Even when the chain lands, blast radius stops at business-sensitive product data. No identity, PKI, hypervisor, backup, CI/CD, or edge-appliance role is in scope, so no CRITICAL/HIGH floor is triggered.
- Installed base is small: niche configurator plugin, not a Woo core module. Population of exposed sites is measured in thousands, not millions — mass-exploitation ROI is modest.
- No KEV, no public PoC repo, EPSS unscored: no evidence of active weaponization at assessment time.
Why not higher?
HIGH would require either a path to code execution / admin compromise, or leakage of credential/PII-class data at scale. This bug delivers neither — it hands out draft product records on a low-install-count plugin. The role multiplier check produces no high-value-role outcome, so the HIGH floor never engages.
Why not lower?
LOW would require either auth prerequisites, a narrow version window, or negligible data value. This is unauthenticated, applies to every version prior to 1.7.3, and the data class (unreleased SKUs, pricing, custom fields) is genuinely useful to competitors and scrapers. That is real business risk, not backlog noise.
What to do — in priority order.
- Block unauthenticated
action=pc_get_dataat the WAF — Add a Wordfence / Cloudflare / ModSecurity rule that returns 403 for any request to/wp-admin/admin-ajax.phpwithaction=pc_get_datawhen no validwp_logged_incookie is present. Deploy within the MEDIUM window — no formal noisgate mitigation SLA applies, but if the plugin is on a high-traffic storefront, treat as a 7-day task. - Deactivate the plugin on sites that do not actively use it — Many merchants installed
Product Configuratorfor a single campaign and never removed it. If it is not driving live SKUs, deactivate and uninstall today — zero business impact, permanent risk retirement. - Purge/clean draft product records — Audit
wp_postsforpost_type=product AND post_status IN ('draft','pending','private','future')and remove or sanitize any records containing embargoed pricing, roadmap notes, or supplier data. Reduces the value of a successful exploit even before patching. - Enable enumeration rate-limiting on admin-ajax.php — Cap unauthenticated admin-ajax requests to something like 30/min/IP at the edge. Turns bulk ID sweeps into a detectable, noisy event and slows scraper economics.
- Two-factor authentication for wp-admin — the endpoint is unauthenticated; 2FA on the login page never enters the request path.
- Hiding wp-login.php / renaming admin paths —
admin-ajax.phpis still directly reachable and is what the exploit targets. - HTTPS / TLS hardening — this is an authorization bug, not a transport bug. Encryption does not change who can invoke the endpoint.
- Setting products to
privateinstead ofdraft— the vulnerability *ignores* post status entirely;privateitems are equally exposed.
Crowdsourced verification payload.
Run from an auditor workstation (no privileges required — the whole point is that the endpoint is unauthenticated). Invoke as ./check-cve-2026-11568.sh https://store.example.com. Exits 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN.
#!/usr/bin/env bash
# noisgate verifier — CVE-2026-11568
# Product Configurator for WooCommerce < 1.7.3 :: unauth draft/private product disclosure
set -u
TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
echo "usage: $0 https://store.example.com" >&2
exit 2
fi
# 1. Fingerprint plugin version from readme.txt
README_URL="${TARGET%/}/wp-content/plugins/product-configurator-for-woocommerce/readme.txt"
VER=$(curl -fsSL --max-time 10 "$README_URL" 2>/dev/null | awk -F': *' '/^Stable tag/ {print $2; exit}')
if [[ -z "$VER" ]]; then
echo "UNKNOWN — could not read plugin readme at $README_URL"
exit 2
fi
echo "detected Product Configurator version: $VER"
# 2. Semver compare against 1.7.3
vercmp() {
# returns 0 if $1 < $2
[[ "$1" == "$2" ]] && return 1
local L=$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -1)
[[ "$L" == "$1" ]]
}
if vercmp "$VER" "1.7.3"; then
# 3. Confirm behavior — probe pc_get_data unauthenticated
AJAX_URL="${TARGET%/}/wp-admin/admin-ajax.php"
RESP=$(curl -fsS --max-time 10 -X POST \
--data "action=pc_get_data&product_id=1" "$AJAX_URL" 2>/dev/null)
if [[ -n "$RESP" && "$RESP" != "0" && "$RESP" != "-1" ]]; then
echo "VULNERABLE — version $VER < 1.7.3 and pc_get_data responded to unauth request"
exit 1
fi
echo "VULNERABLE — version $VER < 1.7.3 (endpoint probe inconclusive; assume exposed)"
exit 1
fi
echo "PATCHED — version $VER >= 1.7.3"
exit 0
If you remember one thing.
Product Configurator installed and on what version. For any site < 1.7.3, ship a WAF rule blocking unauthenticated action=pc_get_data today, then schedule the plugin update. Under the noisgate mitigation SLA this MEDIUM verdict carries no formal mitigation deadline — go straight to the noisgate remediation SLA window of ≤ 365 days, but be pragmatic: this is a one-click plugin update, so batch it into your next monthly WordPress maintenance cycle rather than letting it drift a year. If you find sensitive roadmap / pricing data in draft product records, treat those as already-leaked and adjust launch comms accordingly.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.