Skip to main content
CVE Vulnerability Database

CVE-2025-3479: Forminator Forms Auth Bypass Vulnerability

CVE-2025-3479 is an authentication bypass flaw in Wpmudev Forminator Forms plugin allowing order replay attacks via Stripe PaymentIntent reuse. This post covers technical details, affected versions, impact, and mitigation.

Published:

CVE-2025-3479 Overview

CVE-2025-3479 affects the Forminator Forms plugin for WordPress, a contact, payment, and custom form builder maintained by WPMU DEV. The vulnerability exists in all versions up to and including 1.42.0. The handle_stripe_single function performs insufficient validation on a user-controlled key, allowing an attacker to replay Stripe PaymentIntent identifiers across multiple submissions. Only the first submission produces a real Stripe charge, but the plugin dispatches success emails for every replayed request. This can mislead administrators into fulfilling orders that were never paid for, classifying the issue under improper validation of integrity check value [CWE-354].

Critical Impact

Unauthenticated attackers can replay a single valid Stripe payment to submit multiple fraudulent orders that appear paid to site operators.

Affected Products

  • WPMU DEV Forminator Forms plugin for WordPress (free edition)
  • All versions up to and including 1.42.0
  • Sites using the plugin's Stripe single payment integration

Discovery Timeline

  • 2025-04-17 - CVE-2025-3479 published to the National Vulnerability Database
  • 2026-06-17 - Last updated in NVD database

Technical Details for CVE-2025-3479

Vulnerability Analysis

The defect resides in the handle_stripe_single function within library/modules/custom-forms/front/front-action.php. Forminator accepts a payment identifier submitted by the client and treats it as authoritative without validating that the PaymentIntent has not previously been consumed by another form submission. Because the plugin does not bind the PaymentIntent to a single form entry or track prior use, the same identifier can be replayed. Stripe only processes the initial charge, so subsequent replays never generate additional revenue. However, the plugin continues to fire the standard success workflow, including confirmation emails to the site administrator. This is a business logic error rather than a code execution or memory safety flaw.

Root Cause

The root cause is missing integrity validation on a client-controlled Stripe PaymentIntent identifier. The plugin trusts the reused key without checking Stripe for actual charge status or tracking previously processed intents server-side.

Attack Vector

An unauthenticated remote attacker submits the form once with a valid Stripe payment, then replays the same request or PaymentIntent identifier against the WordPress endpoint. The plugin generates a successful email notification for each replay, prompting fulfillment of unpaid orders.

See the WordPress Custom Forms Code and the Wordfence Vulnerability Report for technical details.

Detection Methods for CVE-2025-3479

Indicators of Compromise

  • Multiple Forminator form submissions referencing the same Stripe PaymentIntent identifier within a short time window
  • Order confirmation emails that do not correspond to charges visible in the Stripe dashboard
  • Repeated POST requests to admin-ajax.php or the Forminator submission endpoint from the same client with identical payment tokens

Detection Strategies

  • Reconcile every Forminator success email against the authoritative Stripe charge ledger before fulfillment
  • Enable and review Forminator submission logs for duplicated payment identifiers across separate entries
  • Instrument the WordPress web tier to log request bodies for the Stripe single-payment handler and alert on repeated PaymentIntent values

Monitoring Recommendations

  • Monitor Stripe webhook activity for a mismatch between payment_intent.succeeded events and internal order counts
  • Track outbound administrator notification volume for anomalous spikes tied to individual form IDs
  • Alert on unauthenticated form submissions originating from the same IP or user agent that reuse payment metadata

How to Mitigate CVE-2025-3479

Immediate Actions Required

  • Update Forminator Forms to a version above 1.42.0 that includes the fix from WordPress Changeset #3274844
  • Audit recent orders against Stripe charge records and cancel fulfillment for any unmatched confirmations
  • Restrict order fulfillment workflows to require verification of the underlying Stripe charge, not the plugin email alone

Patch Information

WPMU DEV addressed the flaw in the Forminator plugin repository via WordPress Changeset #3274844. Site administrators should apply the update through the WordPress plugin manager and confirm the installed version is later than 1.42.0.

Workarounds

  • Disable the Stripe single payment field in Forminator forms until the patch is applied
  • Require manual reconciliation with the Stripe dashboard before any order is marked as fulfilled
  • Place the site behind a web application firewall rule that flags duplicate PaymentIntent identifiers submitted to the Forminator endpoint

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.