CVE-2026-90437
HighCVSS 7.2Summary
The Gravity Forms plugin for WordPress in versions up to and including 3.1.1 is vulnerable to Stored Cross-Site Scripting via Post Excerpt, Post Custom Field, and Rich-Text Paragraph field values due to insufficient input sanitization and output escaping. Unauthenticated attackers can inject arbitrary web scripts into pages that execute when a user accesses the injected page. These fields allow raw HTML submissions via allow_html(), and an entity-encoded payload stored in a data-dialog-confirm attribute evades wp_kses_post() at save time but is decoded into executable markup by insertAdjacentHTML() in the admin JavaScript.
Risk Assessment
Enables malicious script execution in the browser of a user visiting the injected page, potentially leading to session theft or other actions in the victim's context.
Recommendation
Update Gravity Forms to a version later than 3.1.1 and consider restricting raw HTML submissions in form fields.
Other vulnerabilities in Gravity Forms
See all- CVE-2026-97645High
The Gravity Forms plugin for WordPress in versions up to and including 3.1.2 is vulnerable to Stored Cross-Site Scripting via the List Field due to insufficient input sanitization and output escaping. Unauthenticated attackers can inject arbitrary web scripts into pages that execute when a user accesses the injected page. Successful exploitation requires the administrator to click the injected link in the entry detail view and confirm a dialog, triggering the admin JavaScript bundle's delegated data-dialog-callback handler.
- CVE-2026-103039Critical
The Gravity Forms plugin for WordPress in versions up to and including 3.1.2 is vulnerable to PHP Object Injection via a Post Custom Field of List input type. The submitted value is passed to WordPress' unrestricted global maybe_unserialize() instead of the hardened GFCommon::maybe_unserialize(), allowing unauthenticated attackers to inject a PHP object into post meta. If a gadget chain exists via another plugin or theme, this could lead to remote code execution.
- 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-97296High
Deserialization of Untrusted Data vulnerability in Rocketgenius, Inc Gravity Forms allows Object Injection. This issue affects Gravity Forms: from n/a before 3.1.1.
- 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 Stored Cross-Site Scripting via Post Excerpt / Post Custom Field / Rich-Text Paragraph Field Values in all versions up to, and including, 3.1.1 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. This is possible because Post Excerpt, Post Custom Field, and Rich-Text-Editor-enabled Paragraph Text fields allow raw HTML submissions via allow_html(), and an entity-encoded payload stored in a data-dialog-confirm attribute evades wp_kses_post() at save time but is decoded into executable markup by the browser when the plugin's admin JavaScript passes the attribute value to insertAdjacentHTML().
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

