PHP object injection in Gravity Forms via Post Custom Field
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- None
- Attack complexity
- Low
- Impact type
- Code execution
- Confidentiality · integrity · availability
- High · High · High
- Fix status
- No fix listed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA. Impact type from CWE-502.
Summary
The Gravity Forms plugin for WordPress is affected up to and including 3.1.2. Its GFFormsModel::create_post() function passes a submitted Post Custom Field value to WordPress' unrestricted maybe_unserialize(), a deserialization flaw (CWE-502). Unauthenticated attackers can inject a PHP object into post meta. The plugin has no gadget chain itself, but one in another plugin or theme could allow remote code execution.
Written with Claude Haiku 5.5 from the sources below · 2026-10-30
Description from the CNA
The Gravity Forms plugin for WordPress is vulnerable to PHP Object Injection in all versions up to, and including, 3.1.2 via a Post Custom Field whose input type is List. This is due to GFFormsModel::create_post() passing the submitted value to WordPress' unrestricted global maybe_unserialize() rather than the plugin's own hardened GFCommon::maybe_unserialize(), which was added in 3.1.1 and passes allowed_classes => false precisely to prevent object instantiation. Where the field has a content template enabled, the submitted row reaches that call verbatim. This makes it possible for unauthenticated attackers to inject a PHP object into post meta. No PHP Object Injection gadget chain is present in the plugin itself; however, if a gadget chain is present via an additional plugin or theme, it could allow the attacker to perform actions such as remote code execution. Where the custom field is mapped to the protected _wp_page_template meta key, WordPress itself supplies the chain: validate_file() accepts non-scalars, WP_Theme::__toString() then resolves an attacker-controlled path, and on hosts with a readable PEAR install and register_argc_argv enabled this yields remote code execution.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- Yes
- Technical impact
- Total
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| Gravity Forms | Gravity Forms | up to 3.1.2 | — | No fix listed | CNA |
- Gravity Forms VendorGravity Forms Affected up to 3.1.2 Fixed in — No fix listed CNA
Remediation
The sources list no fixed version for Gravity Forms.
Written with Claude Haiku 5.5 from the sources below · 2026-10-30
Timeline
- 2026-10-30 Threatist record created from CVE-2026-103039
- 2026-10-30 Alias added: GHSA-635p-78xg-j6w3
- 2026-10-30 CISA SSVC decision points changed
References
More Gravity Forms vulnerabilities
- TI-2026-58026 Gravity Forms <= 3.1.0.4 - Unauthenticated Arbitrary File Upload via Hidden File Upload Field CVSS 3.1CRITICAL 9.8
- TI-2025-11329 Gravity Forms <= 2.9.20 - Unauthenticated Arbitrary File Upload via 'copy_post_image' CVSS 3.1CRITICAL 9.8
- TI-2023-13292 WordPress Gravity Forms Plugin <= 2.7.3 is vulnerable to PHP Object Injection CVSS 3.1CRITICAL 9.8
- TI-2026-11059 Gravity Forms <= 2.10.4 - Unauthenticated Arbitrary File Read via 'gform_uploaded_files' Parameter CVSS 3.1HIGH 7.5
- TI-2026-15885 Gravity Forms <= 3.0.2 - Unauthenticated Arbitrary File Upload via State/Chunk Hash Confusion CVSS 3.1HIGH 8.1
- TI-2026-13895 Gravity Forms <= 2.10.5 - Unauthenticated Stored Cross-Site Scripting via Post Body Field Value CVSS 3.1HIGH 7.2
Sources
- CVE-2026-103039 · CVE Program
- CVE-2026-103039 · NVD
- FIRST EPSS
- GHSA-635p-78xg-j6w3 · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences