Someone left the mail slot wide enough to shove a loaded gun through the front door
CVE-2026-32475 is an unrestricted file upload (CWE-434) in the Elementor Pro Form widget and Dynamic Tags system, affecting all versions from n/a through 4.2.1. An unauthenticated attacker can bypass file-type enforcement on forms that include a file upload field, uploading a PHP webshell to a predictable path (/wp-content/uploads/elementor/forms/). Successful exploitation yields remote code execution as the web server user (typically www-data). Elementor Pro is a premium WordPress page-builder plugin powering an estimated 2–3 million live websites. The fix shipped in 4.2.2 on August 19, 2026 — the same day as public disclosure.
The vendor scored this CVSS 9.0 CRITICAL with AC:H, acknowledging that some preconditions exist — most likely the requirement that the target form actually contains a file upload field. That's a fair call for the base score, but noisgate downgrades slightly to HIGH 8.5 because the attack surface is gated by a non-default form configuration and there is no confirmed exploitation or public PoC yet. That said, WordPress file upload vulns have a documented patch-to-mass-exploitation window of 48 hours or less (see wp2shell, Ninja Forms CVE-2026-0740), so this grace period is razor-thin.
4 steps from start to impact.
Discover Elementor Pro form with file upload
wp-content/plugins/elementor-pro/ assets or version-leaking meta tags. They then enumerate pages with forms that include a file upload field — a common pattern on job-application, support-ticket, and contact pages. Automated scanners like WPScan or custom Nuclei templates make this trivial at scale.- Target runs Elementor Pro ≤ 4.2.1
- Target has at least one form with a file upload field exposed to the public
- Not every Elementor Pro site uses file upload forms — this is a non-default field the site builder must explicitly add
- Some WAFs (Cloudflare, Sucuri) inspect uploaded file content and may block PHP payloads
Upload PHP webshell via type-bypass
/wp-content/uploads/elementor/forms/ with a predictable or enumerable filename.- Vulnerable code path is reachable (Dynamic Tags + Form widget interaction)
- Server does not strip or rename uploaded files to a non-executable extension
- Hardened PHP configurations (
disable_functions, open_basedir) may limit post-exploitation - Some hosting providers block PHP execution in upload directories via
.htaccessor nginx rules
.php files in upload directories; WAF rules matching webshell signatures in POST bodiesAccess webshell and execute commands
www-data / apache / nginx), granting arbitrary command execution on the host. From here the attacker can exfiltrate database credentials from wp-config.php, dump the WordPress database (user credentials, customer PII, payment metadata), install persistent backdoors, or pivot to other sites on the same shared host.- PHP execution is permitted in the uploads directory
- Web server user has read access to wp-config.php and database
- Containerized or isolated WordPress deployments limit lateral movement
- Read-only filesystem mounts on the uploads directory prevent execution
Post-exploitation: data exfil or persistence
wp-config.php for DB credentials, accesses the MySQL/MariaDB database to extract user tables, WooCommerce order data, or any stored PII. They may install a backdoor plugin, add a rogue admin account, or deploy a cryptominer. On shared hosting, lateral movement to co-hosted sites is often trivial via shared filesystem or database server access.- Database is network-reachable from the web server
- No egress filtering blocks data exfiltration
- Managed WordPress hosts (WP Engine, Kinsta, Flywheel) often have hardened environments with restricted DB access and file monitoring
- Network segmentation limits pivot to other hosts
The supporting signals.
| In-the-wild exploitation | Not confirmed. No CISA KEV listing, no public reports of active exploitation as of 2026-08-20. However, the patch dropped only yesterday — WordPress plugin vulns historically see mass exploitation within 48–90 hours of patch release. |
|---|---|
| Proof-of-concept | No public PoC found. No GitHub repositories, no researcher write-ups with exploit code. The changelog diff between 4.2.1 and 4.2.2 (Dynamic Tags code security + Form widget hardening) provides enough signal for skilled attackers to reverse-engineer a working exploit quickly. |
| EPSS score | Not yet scored. CVE was disclosed 2026-08-19; EPSS typically populates within 1–3 days of NVD publication. Expect a high percentile given unauthenticated RCE in a widely-deployed WordPress plugin. |
| KEV status | Not listed as of 2026-08-20. Monitor CISA KEV catalog daily — addition would trigger immediate patching obligations for federal agencies and should accelerate your SLA. |
| CVSS vector | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H — 9.0 CRITICAL. Network-reachable, no auth, no user interaction, scope change (webshell pivots beyond the vulnerable form component). The AC:H is the sole friction factor in the base score. |
| Affected versions | Elementor Pro all versions through 4.2.1 (from n/a through 4.2.1 per advisory). This includes the 4.1.x and 4.0.x branches. |
| Fixed version | Elementor Pro 4.2.2, released 2026-08-19. Changelog cites 'code security enforcement in Dynamic Tags' and 'Enhanced protection in the Form widget.' |
| Scanning / exposure | Elementor Pro powers an estimated 2–3 million websites (premium tier). Shodan/Censys queries for wp-content/plugins/elementor-pro can enumerate exposed instances. Not all have file upload forms, which narrows the actually-exploitable population. |
| Disclosure date | 2026-08-19 — same day as patch release (coordinated disclosure). |
| Reporting researcher | Not publicly attributed in the changelog or advisory. Likely reported via Elementor's Patchstack vulnerability disclosure program. |
noisgate verdict.
The single most decisive factor is the non-default attack surface: the form must have a file upload field explicitly configured by the site builder, which narrows the exploitable population below the full 2–3M Elementor Pro install base. This gates an otherwise unauthenticated, internet-facing RCE chain enough to pull from CRITICAL to the top of HIGH, but the weaponization speed of WordPress plugin vulns (historically <48 hours) prevents any further downgrade.
Why this verdict
- Unauthenticated + internet-facing: PR:N and AV:N mean no credential theft, phishing, or internal network position is needed. The form endpoint is public by design — this is the most dangerous access class for web vulns.
- Non-default form configuration (downward pressure): The file upload field is not present in Elementor Pro forms by default. A site builder must explicitly add it. This means the *actually exploitable* subset of 2–3M Elementor Pro sites is materially smaller, though the exact fraction is unknown.
- Weaponization velocity (upward pressure): WordPress plugin file-upload vulns are weaponized at extreme speed. The wp2shell chain saw mass exploitation within 48 hours; Ninja Forms CVE-2026-0740 was targeted the same day as disclosure. The patch diff is small and reverse-engineerable.
- Role multiplier: Elementor Pro runs on WordPress web servers. (a) *Low-value role:* personal blogs, brochure sites — compromise is nuisance-level. (b) *Typical role:* business websites, small e-commerce — compromise yields customer PII, stored credentials, SEO spam pivot. (c) *High-value role:* WooCommerce stores processing payments, customer portals with regulated data, or sites serving as software download sources (supply-chain risk). The chain succeeds identically across all roles; blast radius is host-level (web server + database), not domain/fleet-level. WordPress is NOT a canonically high-value-role component (not a DC, hypervisor, IdP, or CI/CD server), so the CRITICAL floor rule does not apply. Some e-commerce deployments with PCI-scoped data push toward HIGH but not CRITICAL.
- No exploitation evidence yet (marginal downward): No KEV listing, no PoC, no campaign reports. This is a 24-hour-old disclosure, so this factor is ephemeral and should not drive long-term severity.
Why not higher?
The CRITICAL floor requires the affected component to canonically occupy a high-value infrastructure role (DC, hypervisor, IdP, CI/CD, PAM, etc.) with fleet-scale or domain-scale blast radius. WordPress/Elementor Pro is a web application tier — compromise is contained to the host and its database. The AC:H rating and non-default file upload form requirement further narrow the reachable population below what a CRITICAL rating demands.
Why not lower?
Dropping below HIGH would ignore that this is an unauthenticated, zero-interaction, network-reachable RCE pathway against 2–3 million internet-facing sites. WordPress plugin file upload vulns are among the fastest-weaponized vulnerability classes in the ecosystem, with documented patch-to-exploitation timelines under 48 hours. The predictable upload path (/wp-content/uploads/elementor/forms/) eliminates post-upload guesswork, and no authentication or user interaction is required at any step.
What to do — in priority order.
- Block PHP execution in the Elementor uploads directory immediately — Add a
.htaccessrule (deny from allorphp_flag engine off) or nginx directive (location ~ /wp-content/uploads/elementor/ { deny all; }) to prevent execution of any uploaded PHP files. This neutralizes the webshell even if the upload succeeds. Deploy within the noisgate mitigation SLA of 30 days — but given weaponization speed, do it today. - Disable or remove file upload fields from Elementor Pro forms — If your forms don't require file uploads, remove those fields entirely. This eliminates the attack surface. If file uploads are business-critical, restrict allowed extensions to images only (jpg, png, gif) at both the Elementor form config and the server level.
- Deploy a WordPress-aware WAF rule — Cloudflare, Sucuri, or Wordfence WAF rules can inspect multipart POST bodies to Elementor form endpoints and block uploads containing PHP code signatures. Wordfence and Patchstack typically ship virtual patches within 24–48 hours of disclosure for high-profile CVEs like this.
- Update to Elementor Pro 4.2.2 — The definitive fix. Test in staging and push to production. Given the HIGH severity and WordPress weaponization speed, target deployment within the noisgate remediation SLA of 180 days — realistically, push this within the first week.
- WordPress user role restrictions — this is an unauthenticated attack via the public form endpoint, so limiting WordPress admin roles or enforcing MFA on wp-admin has zero effect on this chain.
- Content Security Policy (CSP) headers — CSP governs browser-side resource loading; it does not prevent server-side PHP execution of uploaded files.
- Rate limiting on the form endpoint — the attacker needs only one successful upload, not thousands of attempts. Rate limiting adds trivial friction.
Crowdsourced verification payload.
Run this on each WordPress host (or from a management/jump box with HTTP access to your WordPress fleet). Invoke with bash check_cve_2026_32475.sh https://example.com. No special privileges needed — it makes unauthenticated HTTP requests only.
#!/usr/bin/env bash
# check_cve_2026_32475.sh — Detect vulnerable Elementor Pro versions
# Usage: bash check_cve_2026_32475.sh <wordpress_url>
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
URL="${1:?Usage: $0 <wordpress_url>}"
URL="${URL%/}" # strip trailing slash
# Attempt 1: Read version from the readme.txt (common in plugins)
README_URL="${URL}/wp-content/plugins/elementor-pro/readme.txt"
VERSION=$(curl -sL --max-time 10 "$README_URL" | grep -i 'Stable tag:' | head -1 | sed 's/.*: *//;s/[[:space:]]//g')
if [ -z "$VERSION" ]; then
# Attempt 2: Check changelog.txt
CHANGELOG_URL="${URL}/wp-content/plugins/elementor-pro/changelog.txt"
VERSION=$(curl -sL --max-time 10 "$CHANGELOG_URL" | grep -oP '^[0-9]+\.[0-9]+\.[0-9]+' | head -1)
fi
if [ -z "$VERSION" ]; then
# Attempt 3: Check if plugin directory exists at all
HTTP_CODE=$(curl -sL -o /dev/null -w '%{http_code}' --max-time 10 "${URL}/wp-content/plugins/elementor-pro/")
if [ "$HTTP_CODE" = "404" ]; then
echo "PATCHED — Elementor Pro not detected on this host."
exit 0
fi
echo "UNKNOWN — Elementor Pro may be installed but version could not be determined."
exit 2
fi
echo "Detected Elementor Pro version: $VERSION"
# Compare versions: vulnerable <= 4.2.1, patched >= 4.2.2
MINOR=$(echo "$VERSION" | cut -d. -f1,2)
PATCH=$(echo "$VERSION" | cut -d. -f3)
# Version comparison using sort -V
if printf '%s\n' "4.2.2" "$VERSION" | sort -V | head -1 | grep -q "4.2.2"; then
echo "PATCHED — Elementor Pro $VERSION is >= 4.2.2."
exit 0
else
echo "VULNERABLE — Elementor Pro $VERSION is <= 4.2.1. Update to 4.2.2 immediately."
exit 1
fiIf you remember one thing.
/wp-content/uploads/elementor/forms/ on every Elementor Pro host as a compensating control, (2) audit which sites actually use file upload form fields and disable any that aren't business-critical, (3) push the 4.2.2 update through your WordPress management platform (WP-CLI, MainWP, ManageWP, or your CDN's auto-update). If you run a WAF (Cloudflare, Sucuri, Wordfence), confirm virtual patch rules are active. Monitor CISA KEV daily — if this gets listed, switch to immediate patch-or-mitigate posture.Sources
- Elementor Pro Security Vulnerabilities (stack.watch)
- Elementor Pro Changelog
- Patchstack — Elementor Vulnerability Disclosure Program
- ELLIO — wp2shell: Patch to Mass Exploitation in 48 Hours
- Patchstack — 90 Minutes: Watching Attackers Weaponize WordPress Core RCE
- Elementor Statistics 2026 (Colorlib)
- CISA Known Exploited Vulnerabilities Catalog
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.