MEDIUM 5.3

CVE-2026-12432: WP Full Stripe Free Missing Authorization in Payment Status Update

A flaw in the WP Full Stripe Free WordPress plugin (versions up to 8.4.3) allows unauthenticated attackers to manipulate payment records. The vulnerable AJAX action accepts requests from anyone, including non-logged-in users, and doesn't verify who is making the request or check if they should be allowed to do so. An attacker who knows a valid Stripe Payment Intent ID—information that is normally visible to customers during checkout—can use this flaw to mark successful payments as failed or alter the failure reason and message. This does not expose customer payment data or allow theft, but it does enable tampering with transaction history.

Source data · NVD / CISA · public domain

CVSS
3.1 · 5.3 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Weaknesses (CWE)
CWE-862
Affected products
0 configuration(s)
Published / Modified
2026-06-27 / 2026-06-29

NVD description (verbatim)

The WP Full Stripe Free plugin for WordPress is vulnerable to Missing Authorization in versions up to, and including, 8.4.3 via the wpfs_update_failed_payment_status AJAX action. The handler is registered through both wp_ajax_ and wp_ajax_nopriv_ hooks and the underlying update_failed_payment_status() function performs no capability check, no nonce verification, and no logged-in check before calling $this->db->updatePaymentByEventId() with attacker-controlled POST parameters. This makes it possible for unauthenticated attackers who can obtain a valid Stripe Payment Intent ID for the target site (Payment Intent IDs are exposed to the customer browser during normal Stripe.js checkout flows) to manipulate payment records in the site's database, marking previously successful payments as failed and overwriting failure codes and messages with attacker-supplied values.

10 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The wpfs_update_failed_payment_status AJAX action in WP Full Stripe Free is registered via both wp_ajax_ (authenticated) and wp_ajax_nopriv_ (unauthenticated) hooks. The underlying update_failed_payment_status() function omits all authorization controls: no capability check via current_user_can(), no WordPress nonce verification, and no explicit logged-in user check. When invoked, the function passes attacker-supplied POST parameters directly to $this->db->updatePaymentByEventId(), allowing arbitrary modification of payment status fields. The attack vector is network-based, requires no user interaction, and no privilege escalation is needed since unauthenticated access is explicitly enabled. Exploitation is deterministic given a valid Payment Intent ID, which is routinely exposed to the customer's browser during normal Stripe.js integration.

Business impact

WordPress sites using WP Full Stripe Free may experience payment reconciliation issues, including inaccurate order records and confused accounting. Attackers could retroactively mark legitimate transactions as failed, creating confusion in financial records and potentially triggering customer disputes or refund requests. The reputational risk is moderate—this is a data integrity issue rather than a data breach—but it directly affects trust in payment handling and order accuracy. Sites relying on automated payment reconciliation workflows are at higher risk of operational disruption. The vulnerability does not expose payment card data or customer personal information.

Affected systems

WP Full Stripe Free plugin for WordPress in all versions up to and including 8.4.3 are affected. Any WordPress site with this plugin installed and active is vulnerable if it accepts payments via Stripe. The plugin is installed on thousands of WordPress sites, making this a broad-exposure vulnerability. No version is known to be patched; check the WordPress plugin repository or vendor advisory for the current status and availability of fixed versions.

Exploitability

Exploitation is straightforward. An attacker needs only a valid Stripe Payment Intent ID (easily obtained by inspecting network traffic during a real or test checkout on the target site) and can then craft an HTTP POST request to the wp-admin/admin-ajax.php endpoint with action=wpfs_update_failed_payment_status and attacker-supplied parameters. No authentication, no user interaction, and no complex setup are required. The CVSS score of 5.3 (Medium) reflects the integrity impact and low attack complexity, tempered by the absence of confidentiality or availability impact. This is not currently listed on the CISA Known Exploited Vulnerabilities (KEV) catalog, but the low barrier to exploitation means discovery and malicious use are likely once the vulnerability is disclosed.

Remediation

Update WP Full Stripe Free to a patched version as soon as it becomes available. Verify the vendor advisory for the minimum safe version. Until a patch is released, consider disabling the plugin if payment processing is not currently in use, or limit access to wp-admin/admin-ajax.php via web application firewall (WAF) rules to authenticated users only. This is a stopgap; proper patching is the only reliable fix.

Patch guidance

Monitor the official WordPress plugin repository and the vendor's security announcements for a patched release. Apply the update immediately upon availability to all affected WordPress installations. Because this plugin handles payment data, treat patching as high priority. Test the update in a staging environment first to ensure compatibility with your Stripe configuration and any custom payment workflows before deploying to production. Verify that the patched version includes proper nonce validation and capability checks in the wpfs_update_failed_payment_status handler.

Detection guidance

Monitor web server logs for POST requests to wp-admin/admin-ajax.php with action=wpfs_update_failed_payment_status originating from untrusted or external IP addresses. Review payment records for anomalous status changes, especially transitions from successful to failed without corresponding customer or administrator action. Enable logging on the WordPress database level if available, and audit updates to payment tables for entries modified outside normal checkout workflows. A WAF rule detecting this specific AJAX action from unauthenticated sessions would provide early warning.

Why prioritize this

Although the CVSS score is Medium (5.3), prioritization should reflect the business context. Sites handling significant transaction volume or those with strict payment audit requirements should patch this promptly due to the integrity risk and potential compliance implications. The low attack complexity and lack of authentication requirements elevate the practical risk. Since no exploit is yet public and KEV listing is absent, there is a window for proactive remediation before active exploitation becomes widespread.

Risk score, explained

The CVSS 5.3 score (Medium) is driven by: network attack vector (AV:N), low attack complexity (AC:L), no privilege requirement (PR:N), no user interaction (UI:N), and isolated scope (S:U). The integrity impact (I:L) is the primary concern—attackers can modify payment status and metadata. Confidentiality and availability are not impacted. The score does not account for the business sensitivity of payment data or the reputational harm of a compromised audit trail; security teams should consider internal risk context and transaction volume when prioritizing beyond the base CVSS metric.

Frequently asked questions

Can attackers steal credit card information or customer data using this vulnerability?

No. This vulnerability only allows modification of payment status records (marking transactions as failed or changing failure messages). It does not expose customer payment data, card numbers, or personal information. The confidentiality impact is nil.

Do I need a user account on the target WordPress site to exploit this?

No. The AJAX action is explicitly registered to handle unauthenticated requests (via wp_ajax_nopriv_), so an attacker does not need a WordPress account, login, or any user privileges.

What is a Stripe Payment Intent ID and how would an attacker obtain it?

A Payment Intent ID is a unique identifier Stripe assigns to each transaction. It is routinely visible in the browser's network traffic during normal Stripe.js checkout flows and can be extracted by observing HTTP requests. An attacker can inspect the checkout process of any customer using the target site, capture a valid Intent ID, and then abuse this vulnerability.

Will updating the plugin break my existing Stripe integration or orders?

Updating to a patched version should not break existing functionality. It will add proper security checks to prevent unauthorized modification of payment records going forward. As always, test in a staging environment first and verify your Stripe API credentials and webhook configuration after the update.

This analysis is based on disclosed vulnerability information as of the publication and modification dates listed. Patch versions, availability, and remediation timelines should be verified against the official WordPress plugin repository and vendor security advisory. CVSS scores and severity ratings are provided for context and do not override your organization's internal risk assessment process. No exploit code, weaponized proof-of-concept, or attack methodology is provided herein. If you believe you are being targeted, contact your security team or law enforcement immediately. Source: NVD (public-domain), retrieved 2026-08-05. Analysis generated by SEC.co (claude-haiku-4-5).