Skip to main content

Payload Stripe Plugin EUVDEUVD-2026-93490

| CVE-2026-105848 MEDIUM
Exposed Dangerous Method or Function (CWE-749)
2026-10-06 https://github.com/payloadcms/payload GHSA-r9v2-gg2j-22q5
6.4
CVSS 4.0 · Vendor: https://github.com/payloadcms/payload
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain authenticated Payload account
  2. Exploit
    Reach enabled /api/stripe/rest proxy
  3. Execution
    Submit arbitrary Stripe method call
  4. Impact
    Perform 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 rest config option defaulted to true, so the endpoint was exposed by default unless explicitly disabled; and (3) the attacker possesses an authenticated Payload user account whose session can reach the proxy. The vendor advisory explicitly states an authenticated user is required, which limits exploitation to actors with valid accounts; impact is further bounded to operations exposed by the Stripe REST API rather than the host system. Deployments that do not enable the proxy are not affected, and the fix constrains callers to an explicit allowlist of exact Stripe method names with a configurable access callback.

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 rest option defaulted to true (the code carried a 'TODO: in the next major version, default this to false'), so the dangerous endpoint was exposed by default wherever the plugin was installed, not only where an operator deliberately enabled it. On balance this is a real but conditional access-control issue - meaningful for the subset of Payload deployments that install this plugin and expose authenticated users to it, but not a broad internet-wide emergency given the authentication requirement, the niche product footprint, and the lack of any exploitation or POC evidence.

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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

payload 4.0.0-canary.0, < 4.0.0-canary.34
plugin-stripe < 3.90.0
plugin-stripe 4.0.0-canary.0, < 4.0.0-canary.34
payload < 3.90.0

Affected Packages

npm @payloadcms/plugin-stripe fix: 3.90.0, 4.0.0-canary.34
euvd payload fix: 3.90.0
euvd payload_4_0_0_canary_0 fix: 4.0.0-canary.34
euvd plugin_stripe fix: 3.90.0
euvd plugin_stripe_4_0_0_canary_0 fix: 4.0.0-canary.34

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

Vendor (https://github.com/payloadcms/payload) PRIMARY 6.4 MEDIUM
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
vuln.today AI 9.6 CRITICAL

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).

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N

Primary rating from Vendor (https://github.com/payloadcms/payload).

CVSS VectorVendor: https://github.com/payloadcms/payload

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
High
Subsequent system: Integrity
High
Subsequent system: Availability
None

Lifecycle Timeline

1
CVSS changed
Oct 06, 2026 - 17:22 NVD
6.4 (MEDIUM)

DescriptionCVE.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

EPSS Score
0.3%
Top 85% exploitable
Prevalence
Low
Stripe integration plugin for Payload, a niche headless Node.js CMS
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Total

Priority Score

52
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy