CVE-2026-84434
CriticalCVSS 9.8Summary
The Gravity Forms plugin for WordPress (versions up to and including 3.1.0.4) is vulnerable to arbitrary file upload via the upload_file function. A mismatch between validation and persistence pipelines allows hidden file upload fields to bypass extension validation. Unauthenticated attackers can upload executable files, enabling remote code execution.
Risk Assessment
Unauthenticated attackers can upload malicious files and achieve remote code execution on the server, leading to full system compromise.
Recommendation
Update the Gravity Forms plugin to a version newer than 3.1.0.4, or disable it if an update is not possible.
Other vulnerabilities in Gravity Forms
See all- CVE-2026-48866Critical
A Path Traversal vulnerability in Gravity Forms by Rocketgenius Inc. allows access to files outside the restricted directory. This issue affects versions up to 2.10.0.1 inclusive.
- CVE-2026-16649High
The Gravity Forms plugin for WordPress is vulnerable to Stored Cross-Site Scripting via Post Body Field Value in all versions up to, and including, 2.10.5 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The exploit survives save-time sanitization because wp_kses_post allows the required HTML tags and attributes, and the client-side tooltip script re-parses the browser-decoded aria-label value as innerHTML while only stripping script elements, leaving onerror and other event-handler attributes fully intact and executable.
- CVE-2026-19513High
An Arbitrary File Upload vulnerability in the Gravity Forms plugin for WordPress (up to and including 3.0.2). Insufficient validation of multi-file upload chunk state in GFAsyncUpload::upload() allows unauthenticated attackers, when a public form has a File Upload field with Multiple Files enabled, to upload a PNG/PDF polyglot to an attacker-selected public .php or .html filename in the temporary upload directory. This can lead to remote code execution on NGINX or other non-.htaccess respecting servers. Where PHP execution is blocked, attacker-written HTML can result in stored XSS.
- CVE-2026-12997High
The Gravity Forms plugin for WordPress is vulnerable to Directory Traversal in all versions up to and including 2.10.4 via the 'gform_uploaded_files' parameter. Unauthenticated attackers can read arbitrary files on the server, potentially exposing sensitive information.
- CVE-2026-4406Medium
The Gravity Forms plugin for WordPress up to version 2.9.30 is vulnerable to Reflected XSS via the `form_ids` parameter in the `gform_get_config` AJAX action. This is due to the `GFCommon::send_json()` method outputting JSON data wrapped in HTML comments with a `Content-Type: text/html` header instead of `application/json`. The `wp_json_encode()` function does not HTML-encode angle brackets, allowing injected HTML/script tags. The `config_nonce` is publicly embedded on every page with a Gravity Forms form, making it identical for all unauthenticated visitors within a 12-hour nonce tick. This allows unauthenticated attackers to inject arbitrary web scripts if they can trick a user into clicking a link. The vulnerability does not work against authenticated users.
- CVE-2026-4394Medium
The Gravity Forms plugin for WordPress up to version 2.9.30 has a Stored XSS vulnerability in the Credit Card field's 'Card Type' sub-field. The get_value_entry_detail() method outputs the value without escaping, and get_value_save_entry() accepts unsanitized input. The Card Type field is not rendered on the frontend but the backend accepts it from POST requests. Unauthenticated attackers can inject arbitrary scripts that execute when an admin views the entry in the dashboard.
Original NVD description (English source)
The Gravity Forms plugin for WordPress is vulnerable to Arbitrary File Upload in all versions up to, and including, 3.1.0.4 via the upload_file function. This is due to a mismatch between the field validation pipeline and the file persistence pipeline, where hidden file upload fields bypass extension validation and a rejected file's intact upload state is later passed to upload_file() without re-validation. This makes it possible for unauthenticated attackers to upload files that may be executable, which makes remote code execution possible. Exploitation requires the targeted form to contain a File Upload field with its Visibility set to 'Hidden'; the vulnerability is reachable by unauthenticated attackers on any publicly accessible form meeting this condition.

