Arbitrary File Upload Vulnerability in Gravity Forms
An arbitrary file upload vulnerability in the Gravity Forms WordPress plugin (<= 3.0.2) allows unauthenticated attackers to write arbitrary files to the temporary upload directory, potentially leading to remote code execution or stored XSS.
CVE search metadata
CVE search record: CVE-2026-19513. Severity: high. CVSS: 8.1. KEV: no. Product: Gravity Forms (<= 3.0.2). Brief: Arbitrary File Upload Vulnerability in Gravity Forms. Brief link: https://feed.craftedsignal.io/briefs/2026-09-gravity-forms-arbitrary-upload/
Gravity Forms versions up to and including 3.0.2 contain a critical vulnerability in the GFAsyncUpload::upload() function. The flaw stems from insufficient validation of multi-file upload chunk state, allowing the reuse of public form state URL hashes as chunk continuation hashes. Attackers can leverage this to influence the temporary filename used during the upload process.
When a public-facing form includes a File Upload field with the "Multiple Files" option enabled, an unauthenticated attacker can upload files to the plugin's temporary storage directory. On web servers that do not honor .htaccess files (e.g., NGINX), this allows for the upload of executable PHP code, resulting in remote code execution. In environments where the plugin successfully places a .htaccess file to block PHP execution, the vulnerability still allows for stored cross-site scripting (XSS) if an attacker uploads malicious HTML files that are subsequently accessed by users.
Attack Chain
- Attacker identifies a WordPress site running a vulnerable version of Gravity Forms (<= 3.0.2).
- Attacker discovers a public form containing a File Upload field with "Multiple Files" enabled.
- Attacker crafts a malicious payload (e.g., PHP polyglot or malicious HTML).
- Attacker performs a multipart file upload request to the
GFAsyncUpload::upload()endpoint. - Attacker manipulates the chunk continuation hash to control the destination filename in the temporary upload directory.
- Server processes the request and writes the malicious file to the storage directory.
- Attacker navigates to the file URL to trigger execution (RCE) or XSS.
Impact
Successful exploitation can lead to full remote code execution on the underlying server if it does not properly restrict execution in the temporary directory. In secondary scenarios, attackers can achieve stored XSS, allowing for session hijacking or further compromise of authenticated administrative users.
Recommendation
Prioritized actions for the detection engineering and security operations teams:
- Upgrade the Gravity Forms plugin to the latest patched version immediately.
- Implement a web application firewall (WAF) rule to block POST requests to Gravity Forms upload endpoints that contain suspicious filename extensions (e.g., .php, .html, .js) if upgrading is delayed.
- Audit the temporary upload directory for unauthorized files, particularly those with executable extensions.
- Ensure the web server configuration explicitly denies execution of files in the Gravity Forms temporary upload directory.
Immediate actions
Patch Gravity Forms to version 3.0.3 or higher
Mitigations
Verify presence of .htaccess file in the Gravity Forms temporary directory
CVE-2026-19513
Detection coverage 1
Detect Potential Gravity Forms Arbitrary File Upload Attempt
highDetects unauthorized attempts to write files with executable extensions via the Gravity Forms upload handler, targeting CVE-2026-19513.
Detection queries are available on the platform. Get full rules →