Critical Elementor Pro Vulnerability (CVE-2026-32475) Lets Anyone on the Internet Upload PHP and Take Over Your WordPress Site
It's 2 a.m. and your on-call SOC analyst gets a low-priority alert: a new PHP file just appeared in wp-content/uploads/elementor/forms/ on a client's WordPress site. No login attempt. No failed auth in the logs. No suspicious admin session. Just a file, sitting quietly in a folder the web server is more than happy to execute.
That's the story behind CVE-2026-32475 — a critical, unauthenticated file-upload vulnerability in Elementor Pro, one of the most widely deployed WordPress page builders on the planet. No password. No CSRF token. No account. Just a specially crafted form submission, and an attacker can drop a working web shell on a public-facing directory of your site.
If you run Elementor Pro, or you manage WordPress sites for clients, this is not a "patch when convenient" bug. This is a "check right now" bug.
Table of Contents
- What Happened: The Core Vulnerability
- How the Attack Actually Works
- Disclosure Timeline
- Indicators of Compromise & What to Look For
- Commands to Check Exposure and Hunt for Compromise
- Detection & Prevention
- Expert Tips
- Related Reading
- FAQ
- Conclusion
What Happened: The Core Vulnerability
Elementor Pro is the premium companion to Elementor, the drag-and-drop page builder that powers a huge share of the WordPress ecosystem — the free Elementor plugin alone lists 10 million+ active installations on WordPress.org, and Elementor Pro adds features like the Forms widget that lets site owners build contact forms, job applications, and support tickets without touching code.
Security researcher Tin Pham found a flaw sitting inside that Forms widget's File Upload field. It's tracked as CVE-2026-32475, classified under CWE-434 (Unrestricted Upload of File with Dangerous Type), and it carries a CVSS v3.1 score of 9.0 (Critical). It affects all Elementor Pro versions up to and including 4.2.1, and is fixed in version 4.2.2.
The root problem is refreshingly simple to describe and painfully easy to exploit: the code that validates an uploaded file's extension and the code that moves that file into a public directory don't agree on how to treat an empty filename.
How the Attack Actually Works
Here's the plain-English version of what Patchstack, the CNA that assigned the CVE, documented about the flaw:
- The Forms module's File Upload field runs uploaded files through two separate loops — one for validation, one for processing.
- Both loops need to decide what to do when a multipart upload contains an empty filename (something PHP reports as
UPLOAD_ERR_NO_FILE). - The two loops disagree on the "early exit" logic for that empty case.
- An attacker submits two file parts for the same upload field: the first part has an empty filename, the second part is a PHP payload disguised to slip past the extension blocklist.
- The validation loop essentially skips over the trick because of the empty first entry — the extension blocklist never gets a clean shot at the real payload.
- The processing loop, on the other hand, still picks up the malicious file and writes it straight into a publicly reachable folder:
wp-content/uploads/elementor/forms/.
At that point the attacker has a live PHP file sitting in web root. The catch is finding its exact name. Elementor generates the uploaded filename using PHP's uniqid() function — and uniqid() is time-based, not cryptographically random, so an attacker who knows roughly when the upload happened can brute-force the filename in a reasonably small search space. In some site configurations, the attacker can skip the guesswork entirely and simply pull the exact filename out of an autoresponder confirmation email the form sends back. Once they request that file over HTTP, the server's PHP interpreter runs it — full remote code execution, at the privilege level of the web server process.
No login. No nonce. No prior account on the site. The only prerequisite is that the target site has at least one published Elementor form with a File Upload field enabled — a very common setup for job-application pages, support portals, and vendor onboarding forms.
Disclosure Timeline
| Date | Event |
|---|---|
| July 16, 2026 | Patchstack confirms the vulnerability, reported by researcher Tin Pham, and requests a CVE ID. |
| July 17, 2026 | Elementor's team prepares a patch. |
| August 3, 2026 | Patchstack reviews and confirms the vendor's fix resolves the issue. |
| August 19, 2026 | Elementor Pro 4.2.2 ships with the fix; Patchstack publishes its advisory. |
As of this writing, the flaw is not listed in CISA's Known Exploited Vulnerabilities (KEV) catalog, and its EPSS exploitation-probability score is very low. There are no confirmed reports of mass in-the-wild exploitation yet — but that track record means very little for a bug this easy to weaponize once a public proof-of-concept starts circulating. Unauthenticated, low-complexity file-upload-to-RCE bugs in widely deployed plugins are exactly the kind of vulnerability that gets automated into mass-scanning botnets within days of disclosure.
Indicators of Compromise & What to Look For
If you're hunting for signs of exploitation on a site running vulnerable Elementor Pro, focus here:
- Unexpected PHP files in
wp-content/uploads/elementor/forms/— this directory should never contain executable files under normal use. - File names generated by PHP's
uniqid()pattern — typically a 13-character hexadecimal string, sometimes with a prefix, that doesn't match any legitimate upload naming your form produces. - Access log entries showing direct GET requests to files inside the uploads/elementor path shortly after a POST to your form's submission endpoint.
- Multipart POST requests in your WAF or reverse-proxy logs that contain two file parts under the same field name, where the first part has an empty filename.
- Web shell fingerprints — obfuscated PHP, base64-wrapped payloads, or single-line eval() droppers appearing in upload directories.
- Outbound connections from your web server process to unfamiliar external IPs, which often follows successful web shell deployment.
Commands to Check Exposure and Hunt for Compromise
First, confirm your installed Elementor Pro version from the WordPress CLI:
wp plugin list --name=elementor-pro --field=version
What it does: Prints the currently active Elementor Pro version.
When to use it: Immediately, on every site you manage, to triage which ones are on 4.2.1 or earlier.
Expected output: A version string, e.g. 4.2.1. Anything at or below that number is exploitable; 4.2.2+ is patched.
Next, search the uploads directory for suspicious PHP files that don't belong:
find /var/www/html/wp-content/uploads/elementor/forms -type f -name "*.php"
What it does: Lists every PHP file sitting in the Elementor forms upload directory.
When to use it: As part of an incident-response sweep, or as a scheduled integrity check.
Expected output: Normally empty. Any hit here on a form-uploads directory warrants immediate isolation and forensic review.
To grep your web server access logs for the two-part empty-filename exploitation pattern:
grep -E "POST.*elementor.*forms" /var/log/nginx/access.log | grep -i "multipart"
What it does: Surfaces multipart POST requests hitting Elementor's form-processing endpoints so you can review them for anomalies.
When to use it: During log review after patching, to determine whether exploitation attempts occurred before you updated.
Expected output: A list of matching log lines; cross-reference timestamps against any suspicious files found with the find command above.
⚠️ Warning: If you find a confirmed web shell, do not simply delete the file and move on. Isolate the site, preserve logs and the malicious file for forensics, rotate all credentials and secret keys (including wp-config.php salts and any API keys), and assume the attacker may have pivoted further before you act.
Detection & Prevention
- Update immediately. Upgrade Elementor Pro to version 4.2.2 or later. This is the actual fix — everything else below is compensating control while you get there.
- Audit which sites have Elementor forms with File Upload fields enabled and prioritize patching those first; sites without that specific field configuration have a smaller (though not zero) attack surface.
- Disable execution of PHP inside upload directories via web server config — for Nginx, deny PHP handling in
wp-content/uploads/; for Apache, use an.htaccessrule stripping the PHP handler in that path. This breaks the exploit chain even if a file lands there. - Deploy WAF rules that flag or block multipart uploads containing multiple file parts under a single field name with an empty first filename.
- Run a file-integrity monitor against your uploads directories so any new executable file triggers an alert, not a surprise weeks later.
- Restrict or disable the File Upload field on public-facing Elementor forms if you don't strictly need it, until you've confirmed the patch is live everywhere.
- Rotate WordPress secret keys and admin credentials on any site where you can't rule out prior exploitation.
Expert Tips
- Don't trust "unauthenticated but high attack complexity" ratings to mean low urgency — this bug's "complexity" is really just "needs a slightly crafted multipart request," which is trivial to script.
- If you manage a fleet of client WordPress sites, treat this as a fleet-wide triage exercise, not a one-off ticket — run the
wp plugin listcheck across every site tonight, not next sprint. - Because the malicious filename comes from
uniqid(), timestamp correlation between your form submission logs and file-creation timestamps on disk is your fastest way to catch an exploitation attempt after the fact. - Treat any WordPress plugin's upload-handling code as a standing risk category, not a one-time review — file upload logic is one of the most consistently exploited components across the entire plugin ecosystem.
Related Cybersecurity Topics You Should Explore
- tac Command Tutorial: Reverse Logs Fast for Faster Threat Detection
- ToxicPanda 2.0: The Android Trojan Now Hacking 349 Banks
- Windows 11 24H2 Support Ends Oct 13 — Are You at Risk?
- Cat Command in Linux: The SOC Analyst's Secret Weapon
- How a Fake VNC Login Turned Into Full Root Access on macOS
- reconFTW Tutorial: The Recon Tool That Found My Hidden Bounty
- TP-Link Router Flaw Lets Hackers Skip Login Entirely — Here's What's at Risk
- This subfinder Fork Cuts Recon Time in Half — subfaster Review
- 737 Fake VPN Extensions Are Spying on Chrome Users Right Now
- GhostDesk Spyware Alert: Fake CCleaner Steals Passwords & Crypto
- Zoomsday Flaw: Hackers Hijack Zoom Users With Zero Clicks
- SonicWall SMA1000 Flaws Now Fuel Ransomware Attacks – CISA Warns
- HP ThinPro's 'Encrypted' Drives Aren't Actually Safe — Here's Why
- GRR Rapid Response: The Free Google Tool That Hacks 100K PCs Remotely
FAQ
Q: Does this affect the free Elementor plugin, or only Elementor Pro?
A: Only Elementor Pro. The vulnerability lives in the Forms widget's File Upload field, which is a Pro-only feature.
Q: What version fixes CVE-2026-32475?
A: Elementor Pro 4.2.2, released August 19, 2026.
Q: Do I need to be logged in for an attacker to exploit this?
A: No. The attacker needs zero authentication and no prior account on the site — just access to a public form with a File Upload field.
Q: Is this being actively exploited right now?
A: As of this writing there are no confirmed reports of widespread in-the-wild exploitation, and it's not yet on CISA's KEV list. That can change fast once proof-of-concept exploit code circulates publicly, so don't wait for exploitation headlines to patch.
Q: I don't use the File Upload field on my forms — am I still at risk?
A: Your exposure is significantly lower, but update anyway. Configuration can change, staff can add fields later, and you don't want to rely on "we don't use that feature" as your only control.
Q: What should I do if I find a suspicious PHP file in my uploads folder?
A: Isolate the site, preserve the file and logs for forensics, don't just delete and move on, rotate credentials and secret keys, and assume broader compromise until you've confirmed otherwise.
Conclusion
CVE-2026-32475 is a textbook example of why "unauthenticated file upload" bugs deserve top priority on every SOC's patch queue — no phishing required, no credential theft, no social engineering. Just a mismatch between two loops of validation logic, and a public form field most site owners never think twice about. If you or your clients run Elementor Pro 4.2.1 or earlier, stop reading and go check your version number now. Patch to 4.2.2, sweep your uploads directories for anything that shouldn't be there, and lock down PHP execution in upload paths as a standing control going forward.
Found this useful? Share it with your team, drop a comment with your own detection tips, and subscribe so you don't miss the next critical WordPress disclosure.






