Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify public Gravity Forms with multi-file upload enabled
-
DeliveryCapture valid form state URL hash via benign submission
-
ExploitCraft PNG/PDF polyglot embedding PHP web shell
-
InstallReplay hash as chunk continuation token with attacker-chosen .php filename
-
C2Upload lands in unguarded NGINX-served temp directory
-
ExecuteHTTP GET to uploaded file triggers PHP execution
-
ImpactRemote code execution as web server process user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V5 - File Handling File type validation, storage isolation
MITRE ATT&CK
2 techniques across 2 tactics: Command and Control, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Remote code execution requires all three conditions simultaneously: (1) a publicly accessible Gravity Forms form with a File Upload field and Multiple Files mode enabled - authenticated-only or non-upload forms are not exploitable by unauthenticated attackers; (2) a web server that does not honor |
| Impact | The CVSS 8.1 High score (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H) correctly captures the zero-authentication requirement and reflects high attack complexity, which is warranted given the dual preconditions: a publicly accessible form with Multiple Files upload enabled AND a non-Apache web server. EPSS data is absent from the provided input and cannot be assessed. The vulnerability is not listed in the CISA KEV catalog, and no POC has been disclosed at time of analysis - these are distinct signals that should not be conflated. Despite the high base score, real-world RCE risk is meaningfully reduced for the majority of WordPress deployments, as Apache and LiteSpeed hosts with the plugin's intact |
| Exploit ScenarioDerived | An attacker enumerates a target WordPress site running NGINX, identifies a public Gravity Forms form with a File Upload field using Multiple Files mode, and captures a valid form state URL hash by submitting a benign file. They craft a PNG polyglot containing a PHP web shell, replay the captured hash as the chunk continuation token, and specify a |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
Arbitrary file upload in Gravity Forms for WordPress (all versions ≤ 3.0.2) allows unauthenticated attackers to write PHP or HTML files with attacker-controlled names to the plugin's temporary upload directory by exploiting chunk-state hash reuse in the GFAsyncUpload::upload() function. On NGINX or other non-.htaccess-respecting web servers, this leads to remote code execution; on Apache deployments the plugin's bundled .htaccess file blocks PHP execution, though attacker-written .html files can still produce stored same-origin XSS if a victim visits the generated URL. No public exploit has been identified at time of analysis, and exploitation is meaningfully constrained by two simultaneous prerequisites: a specific form configuration and a non-Apache web server.
RemediationAI
Upgrade Gravity Forms beyond version 3.0.2 by reviewing the vendor change log at https://docs.gravityforms.com/gravityforms-change-log/ - the precise patched release number is not confirmed in the available input data and should be verified there before deploying. For operators who cannot patch immediately, the highest-value compensating control is to disable the Multiple Files option on all public-facing File Upload fields in Gravity Forms, which removes the prerequisite for this attack entirely with no functional loss to non-multi-upload workflows. For NGINX deployments, add a server-block directive blocking PHP execution in the Gravity Forms upload path - for example location ~* /gravity_forms/.*\.php$ { deny all; } - then reload NGINX; note this does not block .html-based XSS. For Apache-based stacks, verify that the plugin-installed .htaccess file is present and unmodified in the wp-content/uploads/gravity_forms/ directory; its absence (due to misconfiguration or security hardening that disabled AllowOverride) would re-expose the PHP execution path and should be remediated by restoring the file or setting php_flag engine off via Options directives.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is classified as CWE-434 (Unrestricted Upload of File with Dangerous Type) and originates in GFAsyncUpload::upload(), Gravity Forms' handler for multi-file chunked uploads. Two weaknesses combine: public form state URL hashes can be recycled as chunk continuation hashes, bypassing per-session upload state validation; and attacker-supplied temporary filenames are accepted before sanitization executes, allowing selection of .php or .html extensions. This permits uploading a PNG/PDF polyglot - a file whose leading bytes satisfy image or PDF magic-byte validation but whose body contains PHP code - to an attacker-chosen filename in the plugin's temporary upload directory (wp-content/uploads/gravity_forms/). The CPE cpe:2.3:a:gravity_forms:gravity_forms:*:*:*:*:*:*:*:* covers all versions through 3.0.2. On Apache and LiteSpeed stacks the plugin installs a .htaccess file restricting execution in this directory at setup time, neutralizing the PHP code-execution path. NGINX does not natively process .htaccess directives, leaving .php files served executable by the PHP-FPM or FastCGI handler configured for the vhost.
Know when Gravity Forms gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
AC:H reflects dual precondition of multi-file public form plus NGINX hosting; PR:N confirmed by unauthenticated form submission vector; C/I/A:H for RCE path.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The Gravity Forms plugin for WordPress is vulnerable to Arbitrary File Upload in all versions up to, and including, 3.0.2. This is due to insufficient validation of multi-file upload chunk state in the GFAsyncUpload::upload() function, where public form state URL hashes can be reused as chunk continuation hashes and attacker-controlled temporary filenames are accepted before sanitization. This makes it possible for unauthenticated attackers, when a public form contains a File Upload field with Multiple Files enabled, to upload a valid PNG/PDF polyglot to an attacker-selected public .php or .html filename in the Gravity Forms temporary upload directory. This can lead to remote code execution on WordPress systems that use NGINX or other non .htaccess respecting web servers. NOTE: During installation and activation, the Gravity Forms plugin places a .htaccess file in this directory, which prevents this vulnerability from being exploited despite the PHP file being written to the temporary upload directory. In these cases where PHP execution is blocked, attacker-written HTML can result in stored same-origin cross-site scripting if a victim visits the generated file URL.
Articles & Coverage 1
Executive ViewAI
Gravity Forms for WordPress versions 3.0.2 and earlier contain an arbitrary file upload vulnerability that unauthenticated attackers can exploit to write files to the plugin's temporary directory. On non-Apache servers, this enables remote code execution and complete server compromise; on Apache servers, PHP execution is blocked but HTML files can facilitate stored cross-origin XSS. No public exploit has been identified at time of analysis, though exploitation requires both the vulnerable version and a specific form configuration.
No vendor-released patch identified at time of analysis. Until patch availability, implement: on Apache servers, verify .htaccess blocks PHP execution in the upload directory and restrict directory access; on NGINX and non-Apache servers, disable Gravity Forms entirely or limit file uploads to authenticated users. Deploy Web Application Firewall rules blocking requests to /wp-content/uploads/gravity_forms/ containing executable file extensions. Monitor all file creation in the upload directory, audit file ownership and timestamps, and maintain comprehensive logging of Gravity Forms upload activity for security investigation.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Malicious file upload attacks exploit insufficient validation when web applications accept user-provided files.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
More in Gravity Forms
View allUnauthenticated arbitrary file upload in the Gravity Forms WordPress plugin through version 3.1.0.4 can lead to remote c
The Clockwork SMS clockwork-test-message.php component has XSS via a crafted "to" parameter in a clockwork-test-message
The Gravity Forms WordPress plugin before 2.7.5 does not escape generated URLs before outputting them in attributes, lea
Deserialization of Untrusted Data vulnerability in Rocketgenius Inc. Rated high severity (CVSS 8.3), this vulnerability
Arbitrary file disclosure in the Gravity Forms WordPress plugin (all versions through 2.10.4) lets unauthenticated attac
Stored Cross-Site Scripting in the Gravity Forms WordPress plugin (all versions ≤2.10.5) permits unauthenticated attacke
Stored cross-site scripting (XSS) in Gravity Forms WordPress plugin versions ≤2.10.0 allows remote unauthenticated attac
Stored Cross-Site Scripting in Gravity Forms plugin for WordPress through version 2.10.0 allows unauthenticated remote a
Stored XSS in Gravity Forms for WordPress ≤2.10.0 allows unauthenticated remote attackers to inject malicious JavaScript
Stored Cross-Site Scripting in Gravity Forms for WordPress up to 2.10.0 enables unauthenticated attackers to inject mali
Stored Cross-Site Scripting in Gravity Forms plugin for WordPress allows unauthenticated remote attackers to inject mali
EUVD-2026-69135
GHSA-fjj9-76vm-r7vp
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB