← Back to Feed CACHED · 2026-09-15 16:53:34 · CACHE_KEY CVE-2026-27540
CVE-2026-27540 · CWE-434 · Disclosed 2026-03-19

Unrestricted Upload of File with Dangerous Type vulnerability in Rymera Web Co Pty Ltd.

ASSESSED — NOISGATE
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Like leaving the back door of a tiny boutique wide open on the internet — anyone can walk in, but almost nobody knows the shop exists

CVE-2026-27540 is an unrestricted file upload in the WooCommerce Wholesale Lead Capture plugin (a premium WordPress plugin by Rymera Web Co / Wholesale Suite) affecting all versions through 2.0.3.1. The vulnerable AJAX handler wwlc_file_upload_handler accepts a client-supplied file_settings parameter that overrides the server-side allowed-extensions list. An unauthenticated attacker sends a crafted multipart POST to wp-admin/admin-ajax.php with action=wwlc_file_upload_handler, sets permitted extensions to include .php, and uploads a webshell. No authentication, no user interaction, no race condition — it's a straight shot to remote code execution under the web server's process context.

The vendor's CRITICAL/9.0 score (some sources cite 9.8 with AC:L) is technically accurate for the vulnerability mechanics — unauthenticated RCE via trivial HTTP request is textbook critical. However, the score does not capture the real-world exposure surface: this is a premium niche plugin with roughly 6,000 active installations globally. For an enterprise fleet of 10,000 hosts, the probability of running this plugin is near zero unless the organization operates WooCommerce-based wholesale storefronts. The active exploitation campaign (100,000+ blocked attempts documented by Wordfence from February through August 2026) confirms weaponization is real, but the blast radius per compromised site is limited to that single WordPress instance — there is no lateral-movement multiplier, no domain escalation, no supply-chain pivot inherent to the plugin's role.

"Unauth RCE with active exploitation, but only ~6,000 installs exist worldwide"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Identify vulnerable WordPress instance

Attacker scans the internet for WordPress sites running WooCommerce Wholesale Lead Capture. The plugin exposes identifiable AJAX actions and registration pages. Automated scanners can fingerprint the plugin via its CSS/JS asset paths or the wholesale registration form endpoint.
Conditions required:
  • Target runs WordPress with WooCommerce Wholesale Lead Capture ≤ 2.0.3.1
  • Target's admin-ajax.php is reachable (default on all WordPress sites)
Where this breaks in practice:
  • Only ~6,000 active installations worldwide
  • Premium plugin — not discoverable via wordpress.org free directory queries
Detection/coverage: Wordfence, Sucuri, and Patchstack all have signatures for this plugin. WPScan detects the plugin version.
STEP 02

Craft malicious upload request

Attacker constructs a multipart POST to admin-ajax.php with action=wwlc_file_upload_handler. The request includes a forged file_settings parameter that sets allowed_file_types to include php and disables MIME-type validation. A PHP webshell payload is attached as the file body. No authentication headers are needed.
Conditions required:
  • Knowledge of the AJAX action name and parameter structure (public PoCs exist)
Where this breaks in practice:
  • None — the request is trivial to construct and PoCs are available
Detection/coverage: WAF rules matching wwlc_file_upload_handler in POST body will catch this. Wordfence has published specific firewall rules.
STEP 03

Upload PHP webshell

The server processes the upload, applies the attacker-supplied file settings, and writes the .php file to the WordPress uploads directory. The file is immediately accessible via a predictable URL path under wp-content/uploads/. The attacker receives the file path in the AJAX response.
Conditions required:
  • Web server allows PHP execution in uploads directory (common default)
  • Uploads directory is writable (required for normal WordPress operation)
Where this breaks in practice:
  • Some hardened WordPress configs disable PHP execution in wp-content/uploads/ via .htaccess or Nginx rules
  • Cloud-hosted WordPress (WP Engine, Kinsta, Pantheon) may sandbox uploads
Detection/coverage: File integrity monitoring (OSSEC, Wazfence) will flag new .php files in uploads directories.
STEP 04

Achieve remote code execution

Attacker requests the uploaded webshell via HTTP, gaining code execution as the web server user (typically www-data or apache). From here, the attacker can read wp-config.php for database credentials, dump customer/payment data, install persistent backdoors, or pivot to other sites on the same shared hosting environment.
Conditions required:
  • Uploaded PHP file is executable via web request
Where this breaks in practice:
  • Execution context is limited to web server user privileges — no root/SYSTEM
  • Blast radius is the single WordPress instance (plus shared-hosting neighbors)
  • Container-based WordPress deployments limit filesystem and network pivoting
Detection/coverage: Endpoint detection for webshell behavior (obfuscated eval, base64 decode patterns). Server access logs showing POST-then-GET to new files in uploads directory.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationActive. Wordfence documented 100,000+ blocked exploitation attempts from Feb–Aug 2026. Multiple IP-based campaigns observed (92.241.13.213, 31.59.129.150, and others). Not KEV-listed but exploitation is confirmed and ongoing.
Proof-of-ConceptPublic. At least 2 GitHub repositories host PoC code (indexed by SecureWithUmer/CVE-2026-PoCs). The exploit is trivial — a single curl command with multipart form data.
EPSS Score0.01734 (top ~5% — moderate exploitation probability). Understates actual risk given confirmed active exploitation.
KEV StatusNot listed as of 2026-09-16. Surprising given the documented exploitation campaigns — likely because it's a third-party WordPress plugin, not a vendor product CISA typically tracks.
CVSS VectorUser-provided: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H (9.0). Multiple sources report AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8). The AC:L variant is more accurate — exploitation requires no race condition or special circumstances.
Affected VersionsWooCommerce Wholesale Lead Capture ≤ 2.0.3.1 (all versions prior to fix). Premium plugin, no free tier.
Fixed Version2.0.3.2 — released by Rymera Web Co / Wholesale Suite. Available through the plugin's commercial update channel.
Exposure / Install Base~6,000 active installations globally (per Wordfence and plugin marketplace data). Niche premium WooCommerce extension for wholesale B2B registration workflows.
Disclosure TimelineDisclosed 2026-02-20, CVE published 2026-03-19. Exploitation began within days of disclosure per Wordfence telemetry (first spike 2026-02-25).
ReporterDiscovered by Wordfence / Patchstack ecosystem researchers. Coordinated disclosure through the WordPress plugin security ecosystem.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to HIGH (8.0/10)

Active unauthenticated RCE with confirmed in-the-wild exploitation keeps this firmly dangerous for any site running the plugin. The single most decisive factor for downgrading from CRITICAL is the extremely narrow installed base (~6,000 sites globally) — for a typical enterprise fleet, the probability of exposure approaches zero, and per-site blast radius is limited to a single WordPress instance with no inherent domain/fleet/supply-chain escalation path.

HIGH Vulnerability mechanics and exploitability
HIGH Active exploitation status
MEDIUM Installed base estimate (~6,000 is vendor/scanner-sourced, not independently verified)

Why this verdict

  • Unauthenticated RCE with trivial exploit: No credentials, no user interaction, single HTTP request. Public PoCs are available and exploitation is actively occurring — this is the floor-setting factor that prevents any downgrade below HIGH.
  • Tiny global install base: ~6,000 active installations of a premium niche WooCommerce plugin. For an enterprise managing 10,000 hosts, the odds of running this plugin are negligible unless the organization specifically operates wholesale B2B storefronts on WordPress.
  • Single-site blast radius: Compromise yields web-server-level access to one WordPress instance. No domain controller, no fleet propagation, no supply-chain pivot. The worst secondary outcome is shared-hosting lateral movement, which is environment-dependent.
  • Role multiplier: WordPress with a WooCommerce wholesale plugin occupies role (b) at best — a line-of-business web storefront. It is not an identity provider, hypervisor, backup server, CI/CD system, or network edge appliance. The compromised site may hold customer PII and payment metadata (blast radius: tenant-level data breach), but this does not reach domain/fleet/supply-chain scale. The floor for HIGH is met by the active exploitation of unauth RCE; the floor for CRITICAL is NOT met because the component is not canonically high-value-role software and <0.01% of the enterprise server fleet runs it.
  • Active exploitation confirmed but not KEV-listed: Wordfence has blocked 100,000+ attempts across multiple campaigns from Feb–Aug 2026. The lack of KEV listing is likely due to CISA's focus on vendor products rather than third-party WordPress plugins, not an indicator of low risk.

Why not higher?

CRITICAL would be appropriate if this plugin were widely deployed infrastructure software (e.g., a core WordPress component affecting millions of sites) or if the compromised component occupied a high-value role like an identity provider or hypervisor. With only ~6,000 global installations and single-site blast radius limited to web-server-user context, the exposure population and impact ceiling do not justify CRITICAL for enterprise prioritization. The AC:H in the user-provided CVSS vector (if accurate) would further reduce severity, though most public sources report AC:L.

Why not lower?

Active unauthenticated RCE with confirmed exploitation campaigns involving 100,000+ attempts is a hard floor for HIGH. The exploit is trivial (single curl command), PoCs are public, and attackers are actively scanning for this specific plugin. Any organization that does run this plugin faces immediate, no-skill-required compromise. Downgrading to MEDIUM would be irresponsible given the confirmed weaponization.

05 · Compensating Control

What to do — in priority order.

  1. Block the AJAX action at WAF/reverse proxy — Add a WAF rule to deny any POST to admin-ajax.php containing action=wwlc_file_upload_handler in the request body. This neutralizes the attack vector entirely without breaking core plugin functionality for existing registered users. Deploy within 30 days per noisgate mitigation SLA for HIGH, or immediately if you have confirmed installations.
  2. Disable PHP execution in uploads directory — Add php_flag engine off in .htaccess or equivalent Nginx location block for wp-content/uploads/. This prevents any uploaded PHP file from executing, converting the file upload into a harmless file-write. This is a defense-in-depth measure that should already be in place on hardened WordPress deployments.
  3. Update to version 2.0.3.2 — Apply the vendor patch via the Wholesale Suite commercial update channel. This is the definitive fix. Target completion within 30 days (noisgate mitigation SLA for HIGH).
  4. Audit uploads directory for existing webshells — Search wp-content/uploads/ for .php files that should not exist. Check web server access logs for POST requests to admin-ajax.php with wwlc_file_upload_handler followed by GET requests to files in the uploads directory. Cross-reference against published IOC IPs (92.241.13.213, 31.59.129.150, etc.).
What doesn't work
  • WordPress user-role restrictions — the vulnerability is unauthenticated, so WordPress authentication and role checks are completely bypassed.
  • CAPTCHA on registration forms — the exploit hits the AJAX handler directly, not the registration form UI. CAPTCHA provides zero protection.
  • Disabling WordPress REST API — the exploit uses the legacy admin-ajax.php endpoint, not the REST API. Disabling REST API has no effect on this attack vector.
06 · Verification

Crowdsourced verification payload.

Run this on each WordPress host (or via SSH across your fleet) as any user with read access to the WordPress installation directory. Usage: bash check_cve_2026_27540.sh /var/www/html where the argument is the WordPress root directory. No elevated privileges required.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# CVE-2026-27540 checker — WooCommerce Wholesale Lead Capture
# Usage: bash check_cve_2026_27540.sh /path/to/wordpress
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

WP_ROOT="${1:-.}"
PLUGIN_DIR="$WP_ROOT/wp-content/plugins/woocommerce-wholesale-lead-capture"

if [ ! -d "$PLUGIN_DIR" ]; then
  echo "UNKNOWN — WooCommerce Wholesale Lead Capture plugin not found at $PLUGIN_DIR"
  exit 2
fi

# Extract version from the main plugin file header
MAIN_FILE="$PLUGIN_DIR/woocommerce-wholesale-lead-capture.php"
if [ ! -f "$MAIN_FILE" ]; then
  echo "UNKNOWN — Main plugin file not found"
  exit 2
fi

VERSION=$(grep -i 'Version:' "$MAIN_FILE" | head -1 | sed 's/.*Version:[[:space:]]*//' | tr -d '[:space:]')

if [ -z "$VERSION" ]; then
  echo "UNKNOWN — Could not extract plugin version"
  exit 2
fi

echo "Detected WooCommerce Wholesale Lead Capture version: $VERSION"

# Compare version — vulnerable if <= 2.0.3.1
# Use sort -V for version comparison
FIXED="2.0.3.2"
LOWEST=$(printf '%s\n%s' "$VERSION" "$FIXED" | sort -V | head -1)

if [ "$VERSION" = "$FIXED" ] || [ "$LOWEST" = "$FIXED" ]; then
  echo "PATCHED — Version $VERSION >= $FIXED"
  exit 0
else
  echo "VULNERABLE — Version $VERSION is below fixed version $FIXED (CVE-2026-27540)"
  # Bonus: check for existing webshells in uploads
  UPLOADS="$WP_ROOT/wp-content/uploads"
  if [ -d "$UPLOADS" ]; then
    SHELLS=$(find "$UPLOADS" -name '*.php' -type f 2>/dev/null | wc -l)
    if [ "$SHELLS" -gt 0 ]; then
      echo "WARNING: Found $SHELLS .php file(s) in uploads directory — possible compromise!"
      find "$UPLOADS" -name '*.php' -type f 2>/dev/null
    fi
  fi
  exit 1
fi
07 · Bottom Line

If you remember one thing.

TL;DR
If you run WooCommerce Wholesale Lead Capture on any WordPress site in your fleet, treat this as an emergency: active exploitation has been ongoing since February 2026 with 100,000+ documented attack attempts. Update to version 2.0.3.2 immediately — do not wait for the noisgate remediation SLA of 180 days for HIGH. Deploy the WAF block on wwlc_file_upload_handler today as a same-day compensating control, then patch within the noisgate mitigation SLA of 30 days. Audit your wp-content/uploads/ directories for .php webshells and review access logs against the published IOC IPs. If you do NOT run this plugin (likely, given only ~6,000 global installs), confirm its absence via the verification script and move on — this CVE does not affect your fleet.

Sources

  1. GBHackers — Active Exploitation of WooCommerce Wholesale Lead Capture
  2. NVD — CVE-2026-27540 Detail
  3. Rapid7 — CVE-2026-27540 Vulnerability Database
  4. Exploit Intel — CVE-2026-27540 Analysis
  5. Wholesale Suite — Plugin Changelog
  6. OpenCVE — CVE-2026-27540
  7. SecurityOnline — WooCommerce Wholesale Lead Capture Exploited in the Wild
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.