CVE-2026-4406
MediumCVSS 4.7Exploitation Probability (EPSS)
Low risk28th percentile - higher than 28% of all known CVEs
Summary
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.
Risk Assessment
The risk is that an unauthenticated attacker can remotely inject malicious scripts, potentially leading to session theft, redirects, or other actions on the site, but only against unauthenticated users.
Recommendation
Update the Gravity Forms plugin to a version above 2.9.30 and consider adding a Content-Type: application/json header for AJAX responses.
Other vulnerabilities in Gravity Forms
See all- CVE-2026-84434Critical
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.
- 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-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 Reflected Cross-Site Scripting via the `form_ids` parameter in the `gform_get_config` AJAX action in all versions up to, and including, 2.9.30. This is due to the `GFCommon::send_json()` method outputting JSON-encoded data wrapped in HTML comment delimiters using `echo` and `wp_die()`, which serves the response with a `Content-Type: text/html` header instead of `application/json`. The `wp_json_encode()` function does not HTML-encode angle brackets within JSON string values, allowing injected HTML/script tags in `form_ids` array values to be parsed and executed by the browser. The required `config_nonce` is generated with `wp_create_nonce('gform_config_ajax')` and is publicly embedded on every page that renders a Gravity Forms form, making it identical for all unauthenticated visitors within the same 12-hour nonce tick. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that execute if they can successfully trick a user into performing an action such as clicking on a link. This vulnerability cannot be exploited against users who are authenticated on the target system, but could be used to alter the target page.

