Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain authenticated Payload account
-
ExploitReach enabled /api/stripe/rest proxy
-
ExecutionSubmit arbitrary Stripe method call
-
ImpactPerform unintended Stripe operations
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Dangerous method exposure prevention
|
| Exploitation Conditions | Exploitation requires ALL of: (1) the application depends on @payloadcms/plugin-stripe at a vulnerable version (< 3.90.0, or 4.0.0-canary.0 through < 4.0.0-canary.34); (2) the Stripe REST proxy endpoint /api/stripe/rest is active - notably the vulnerable |
| Impact | This is a GitHub-advisory-sourced flaw (GHSA-r9v2-gg2j-22q5, CWE-749 Exposed Dangerous Method) in the @payloadcms/plugin-stripe package where the optional Stripe REST proxy performs insufficient access control, letting an authenticated user invoke arbitrary Stripe REST API methods. No CVSS score or vector is provided (N/A), no EPSS probability is available, the CVE is not in CISA KEV, and no public POC is referenced - so all quantitative exploitation signals are absent and cannot be compared. SSVC-style reasoning must therefore rely on the vendor advisory alone: exploitation status is 'none observed', the technical impact is partial-to-total over the connected Stripe account rather than the host, and automatability is limited because an attacker first needs a valid authenticated account that can reach the proxy. A notable aggravating factor visible in the patch diff is that the vulnerable |
| Exploit ScenarioDerived | An attacker who holds (or registers) a low-privilege authenticated account on a Payload application that ships the Stripe plugin with the REST proxy enabled sends a POST to /api/stripe/rest specifying an arbitrary Stripe method such as subscriptions.list or a mutating call. Because the proxy did not restrict callers to an allowlist of specific Stripe methods, the request is forwarded to Stripe using the server's secret key, letting the user read or manipulate Stripe data beyond their intended permissions. No public exploit code is referenced, but the attack requires only a standard HTTP request and a valid session. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Insufficient access control in the @payloadcms/plugin-stripe package allows an authenticated Payload user to invoke unintended Stripe REST API operations through the optional /api/stripe/rest proxy, which in vulnerable releases was registered by default (rest defaulted to true). Only deployments that use the plugin, have the REST proxy reachable, and grant the attacker a valid authenticated account are affected; the impact is confined to Stripe API operations rather than host-level compromise, though it crosses a trust boundary into the connected Stripe account (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N). No public exploit code has been identified at time of analysis and the flaw is not confirmed as actively exploited (no CISA KEV listing), but a vendor patch and a public GitHub advisory exist, so upgrading is the straightforward path. The vendor fix replaces the boolean toggle with an explicit allowlist of exact Stripe method names plus an optional access callback.
RemediationAI
Upgrade the Payload packages, including @payloadcms/plugin-stripe, to 3.90.0 or later, or to 4.0.0-canary.34 or later on the v4 canary line; vendor advisory and upgrade guidance are at https://github.com/payloadcms/payload/security/advisories/GHSA-r9v2-gg2j-22q5, with the underlying fix in commit 2f94a4205e5ba3ec0e91c92ed54f24f429826dd0. Be aware that the patched plugin no longer accepts the boolean rest forms: a configuration of rest: true will not work after upgrading and must be replaced with an explicit object such as rest: { allowedMethods: ['subscriptions.list'], access: async ({ req }) => Boolean(req.user) }, keeping allowedMethods as narrow as the application actually needs; omitting rest entirely disables the endpoint. If immediate upgrading is not possible, explicitly set the rest option to false on the vulnerable version to deregister the /api/stripe/rest endpoint - note that simply omitting the option is not sufficient there, because the vulnerable code defaulted it to true, so the field must be set explicitly. Where the proxy must remain enabled, restrict reachability to trusted authenticated users only (via Payload access control or network/reverse-proxy rules) and limit the Stripe operations available through it; the trade-off is that any residual exposure still leaves the app's Stripe secret key usable for the permitted calls, and the underlying lack of a method allowlist is not addressable by configuration alone on unpatched versions. For server-side integrations, use the plugin's stripeProxy function instead of the public REST proxy to avoid exposing Stripe operations to client callers at all.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 5 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability is classified CWE-749 (Exposed Dangerous Method or Function) and lives in the Node.js/npm package @payloadcms/plugin-stripe, an official plugin for the Payload CMS headless application framework that integrates Stripe billing and payment operations. When enabled, the plugin registers a POST endpoint at /api/stripe/rest that acts as a server-side proxy: it forwards a caller-supplied stripeMethod plus parameters to the Stripe REST API using the application's configured Stripe secret key, returning the response to the client. The intended guard is Payload's access-control layer, but in vulnerable versions the proxy performed insufficient validation of the requested Stripe method and lacked a method allowlist, so any authenticated Payload user able to reach the endpoint could select Stripe methods beyond those the application intended to expose - effectively turning the app's Stripe credentials into a general-purpose API gateway for that account. Compounding the issue, the plugin's config logic in packages/plugin-stripe/src/admin.ts used rest: incomingPluginConfig?.rest ?? true, meaning the proxy was registered by default unless an operator explicitly disabled it. The patch (commit 2f94a4205e5ba3ec0e91c92ed54f24f429826dd0) introduces sanitizeStripeRESTConfig and a StripeRESTConfig type requiring an explicit allowedMethods allowlist of exact Stripe method names, supports a configurable access callback defaulting to Payload admin access, rejects any method outside the allowlist before it reaches Stripe, and no longer accepts the legacy boolean forms - the documentation example also switched the parameter naming from 'stripe.subscriptions.list' to 'subscriptions.list'. The S:C scope metric in the assessed vector reflects that a successful exploit lets the attacker act outside Payload's own security context, against the connected Stripe account.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N
Network-reachable HTTP endpoint (AV:N/AC:L), advisory requires an authenticated user so PR:L, and the proxy grants access to the separate Stripe account (S:C) enabling data read and unintended mutating operations (C:H/I:H).
Primary rating from Vendor (https://github.com/payloadcms/payload).
CVSS VectorVendor: https://github.com/payloadcms/payload
Lifecycle Timeline
1DescriptionCVE.org
Impact
An authenticated user could perform unintended Stripe operations through the optional Stripe REST proxy.
You are affected if ALL of these are true:
- Your application uses
@payloadcms/plugin-stripe. - The optional Stripe REST proxy is enabled.
- An authenticated user can reach the proxy.
Deployments that do not enable the Stripe REST proxy are not affected.
Patches
Users should upgrade Payload packages to >= 3.90.0 or >= 4.0.0-canary.34.
Workarounds
Upgrading to a patched version is recommended.
If you cannot upgrade immediately, disable the Stripe REST proxy. If it must remain enabled, restrict access to trusted users and only the required Stripe operations.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-93490
GHSA-r9v2-gg2j-22q5
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB