Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
AV:N/PR:N reflects the unauthenticated public webhook endpoint; I:H because the attack fully subverts payment authorization, enabling fraudulent fulfillment with no actual funds transferred.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
Lifecycle Timeline
2DescriptionCVE.org
The Payment Plugins for Stripe WooCommerce plugin for WordPress is vulnerable to authorization bypass in all versions up to, and including, 4.0.7. This is due to the plugin not properly verifying that a user is authorized to perform an action. This makes it possible for unauthenticated attackers to mark arbitrary pending asynchronous WooCommerce orders as paid by forging a charge.pending event with attacker-controlled metadata.order_id, metadata.gateway_id, and a charge object carrying status=succeeded and captured=true, triggering payment_complete() and downstream fulfillment flows with an attacker-supplied transaction ID. Exploitation requires the merchant to have left the webhook_secret_test or webhook_secret_live option blank, which is the plugin's default state until a Stripe-issued whsec_ value is manually configured; once a non-empty secret is set, the signature verification cannot be bypassed.
AnalysisAI
Order fulfillment fraud in the Payment Plugins for Stripe WooCommerce WordPress plugin allows unauthenticated network attackers to mark arbitrary pending WooCommerce orders as paid without actual payment. Any store running version 4.0.7 or earlier with the default blank webhook secret is exposed to fraudulent goods acquisition, as the plugin's webhook endpoint accepts and processes forged Stripe charge events without signature verification. No public exploit has been identified at time of analysis, but the attack requires no credentials, targets the default installation state, and is trivially automatable.
Technical ContextAI
The plugin registers a WooCommerce webhook endpoint handled by class-wc-stripe-controller-webhook.php (confirmed in plugin Trac at tags/3.3.105 and tags/3.3.108). Stripe's webhook security model relies on HMAC-SHA256 signatures using a whsec_ signing secret to verify that events originate from Stripe's infrastructure. This plugin's implementation gates that signature check on the presence of a non-empty webhook_secret_test or webhook_secret_live option. Because both options default to blank, the signature verification branch is skipped entirely in the default installation, leaving the endpoint fully open to arbitrary POSTed payloads. CWE-862 (Missing Authorization) is the root cause: there is no fallback authorization control when the secret is absent. An attacker forging a charge.pending event with attacker-controlled metadata.order_id, metadata.gateway_id, and a charge object bearing status=succeeded and captured=true causes the plugin to invoke payment_complete() and the full downstream WooCommerce fulfillment flow, including digital delivery and shipment triggers, using an attacker-supplied transaction ID.
RemediationAI
Update the plugin to a version beyond 4.0.7; the WordPress plugin Trac repository shows a fix committed in the 3.3.108 branch (changeset: https://plugins.trac.wordpress.org/changeset?reponame=&old=3611878%40woo-stripe-payment&new=3611878%40woo-stripe-payment), but an exact confirmed patched release for the 4.x version track is not independently verifiable from available data - consult the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/45185f25-9a1f-411d-9d2a-295b5ceb5629 and the WordPress plugin repository for the latest patched release. As an immediate zero-downtime workaround, merchants must manually configure a Stripe-issued webhook signing secret (a whsec_ value obtained from the Stripe Dashboard) into both the webhook_secret_test and webhook_secret_live plugin settings fields; once either field is non-empty, the plugin enforces HMAC-SHA256 signature verification and the bypass is fully mitigated with no functional side effects. This workaround should be applied immediately on any store where the patch has not yet been deployed.
More in Wordpress Plugin
View allThe Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
The Hash Form - Drag & Drop Form Builder plugin for WordPress is vulnerable to arbitrary file uploads due to missing fil
Authentication bypass in the LiteSpeed Cache WordPress plugin (versions prior to 6.5.0.1) allows unauthenticated remote
The Simple File List plugin for WordPress through version 4.2.2 contains an unauthenticated remote code execution vulner
The SureTriggers WordPress plugin through version 1.0.82 contains a privilege escalation vulnerability that allows unaut
The Ninja Forms plugin before 2.9.42.1 for WordPress allows remote attackers to conduct PHP object injection attacks via
The Business Directory Plugin - Easy Listing Directories for WordPress plugin for WordPress is vulnerable to time-based
SQL injection in the NotificationX WordPress plugin (versions up to and including 2.8.2) allows unauthenticated remote a
The POST SMTP Mailer - Email log, Delivery Failure Notifications and Best Mail SMTP for WordPress plugin for WordPress i
The MasterStudy LMS WordPress Plugin - for Online Courses and Education plugin for WordPress is vulnerable to union base
The Email Subscribers by Icegram Express plugin for WordPress is vulnerable to SQL Injection via the ‘hash’ parameter in
Remote code execution in the WP Query Console WordPress plugin (versions up to and including 1.0) by Ajit Bohra allows u
Same weakness CWE-862 – Missing Authorization
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-48509
GHSA-6wpf-gvw9-9j67