Automated Threat Modeling

Everest Forms CVE-2026-3296: Brief Summary of Unauthenticated PHP Object Injection via Form Entry Metadata

CVE-2026-3296 is a critical (CVSS 9.8) unauthenticated PHP object injection vulnerability in the Everest Forms WordPress plugin through version 3.4.3. Serialized payloads submitted through public forms are deserialized unsafely when an administrator views entries.

CVE Analysis

7 min read

ZeroPath CVE Analysis
ZeroPath CVE Analysis

2026-04-07

Everest Forms CVE-2026-3296: Brief Summary of Unauthenticated PHP Object Injection via Form Entry Metadata
Experimental AI-Generated Content

This CVE analysis is an experimental publication that is completely AI-generated. The content may contain errors or inaccuracies and is subject to change as more information becomes available. We are continuously refining our process.

If you have feedback, questions, or notice any errors, please reach out to us.

[email protected]

Introduction

An unauthenticated PHP object injection vulnerability in the Everest Forms WordPress plugin lets any internet user plant a serialized PHP payload through a public form, where it sits in the database waiting to detonate when an administrator views form entries. With a CVSS score of 9.8 and no authentication required, CVE-2026-3296 is a serious risk for the many WordPress sites that rely on this plugin for contact forms, surveys, and payment forms.

Everest Forms is a popular WordPress form builder plugin developed by WPEverest (a subsidiary of ThemeGrill), based in Kathmandu, Nepal. The plugin has over 100,000 active installations and provides drag-and-drop form building, payment integration, and surveys. It holds a significant share of the WordPress form plugin ecosystem, alongside alternatives like WPForms and Gravity Forms.

Technical Information

The root cause of CVE-2026-3296 is a classic CWE-502 (Deserialization of Untrusted Data) issue. The flaw is in the form entry metadata pipeline, in how the plugin stores and later retrieves user-submitted form data.

Data Flow: Submission to Storage

When a user submits a form built with Everest Forms, the plugin processes the field values and stores them in the wp_evf_entrymeta database table. It applies WordPress's sanitize_text_field() to the input, but that function does not strip PHP serialization control characters. A crafted serialized string such as O:8:"SomeClass":1:{s:4:"prop";s:5:"value";} passes through sanitize_text_field() intact and is written to the database.

Data Flow: Storage to Deserialization

The payload stays inert in the database until an administrator opens the Everest Forms entries page in the WordPress dashboard. At that point, html-admin-page-entries-view.php retrieves the stored metadata and checks whether it is serialized. If it is, the plugin calls PHP's native unserialize() directly:

if ( is_serialized( $meta_value ) ) { $raw_meta_val = unserialize( $meta_value ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize

The unserialize() call omits the allowed_classes parameter, so PHP will instantiate any class available in the runtime environment. That omission is the core of the vulnerability.

Exploitation Walkthrough

The attack runs in five stages:

  1. The attacker identifies a WordPress site running Everest Forms version 3.4.3 or earlier with at least one publicly accessible form. Detecting the plugin version is often trivial, through readme.txt or by inspecting the source.

  2. The attacker builds a serialized PHP object targeting a known POP (Property Oriented Programming) gadget chain. With so many plugins in circulation, the WordPress ecosystem frequently contains classes with exploitable magic methods (__destruct, __wakeup, __toString) that can be chained into file writes, command execution, or other dangerous operations.

  3. The attacker submits the serialized payload as the value of any field on the public-facing Everest Forms form. This is a standard form submission, and it needs no authentication, no special headers, and no CSRF token bypass.

  4. The plugin runs sanitize_text_field() on the submitted value. Because this function targets HTML entities, tags, and whitespace rather than serialization syntax, the payload survives intact and is stored in the wp_evf_entrymeta table.

  5. When any administrator views the form entries list or opens an individual entry in the WordPress admin panel, the plugin retrieves the stored metadata and passes it to the unrestricted unserialize() call. PHP instantiates the objects described in the serialized data and executes the gadget chain in the context of the administrator's authenticated session.

Why sanitize_text_field() Is Insufficient

WordPress's sanitize_text_field() is designed to clean strings for safe display. It strips HTML tags, removes extra whitespace, and encodes certain special characters. PHP serialization format, however, uses characters like O:, s:, {, and } as structural delimiters, and the function targets none of them. The payload persists because the sanitization scope does not match the threat model.

The Fix in Version 3.4.4

The vendor replaced the direct unserialize() call with a custom wrapper function named evf_maybe_unserialize(). The table below summarizes how the behavior changed:

ComponentVersion 3.4.3 BehaviorVersion 3.4.4 BehaviorSecurity Impact
Entry View ProcessingUses native unserialize() directly on $meta_valueUses evf_maybe_unserialize() on $meta_valuePrevents arbitrary object instantiation during admin viewing
Deserialization WrapperNot used for this data pathImplements allowed_classes => false for PHP 7.1 and aboveBlocks class loading during deserialization
Legacy PHP SupportExecutes deserialization normallyBlocks unserialize() attempts entirely on PHP versions older than 7.1Prevents exploitation on outdated server environments

WordPress core itself has an open Trac ticket (#37757) recommending that maybe_unserialize pass allowed_classes to prevent exactly this class of vulnerability.

Affected Systems and Versions

All versions of the Everest Forms WordPress plugin up to and including version 3.4.3 are affected. The vulnerability is present in any WordPress installation where:

  • Everest Forms version 3.4.3 or earlier is installed and active
  • At least one form is publicly accessible (the default use case for a form builder plugin)
  • An administrator periodically views form entries through the WordPress admin panel

The fix is available in version 3.4.4.

Vendor Security History

This is not the first PHP object injection vulnerability in Everest Forms. In August 2025, Patchstack reported a critical PHP object injection vulnerability affecting Everest Forms version 3.2.2 and below, which impacted over 100,000 sites. That earlier vulnerability also involved the evf_maybe_unserialize wrapper in certain environments. The same vulnerability class, PHP object injection via unsafe deserialization, has recurred within roughly eight months, which suggests a systemic problem in how the plugin handles serialized data across its codebase. The fix for CVE-2026-3296 extends the same evf_maybe_unserialize() wrapper to a code path that was apparently missed in the earlier remediation.

References

Detect & fix
what others miss

Works with
  • GitHub
  • GitLab
  • Bitbucket
  • Azure DevOps Services
  • Gerrit
  • CVS
  • Jira
  • Linear
  • Slack
  • Security Compass
Explore integrations
Security magnifying glass visualization