/

CVE-2026-105848

Severity:

CRITICAL RISK

(9.6)

Excessive API Exposure (CWE-749) in Payload Stripe Plugin

CVE-2026-105848

Analyzed

Vulnerability type

Category:

Exposed Dangerous Functionality

CWE:

CWE-749, CWE-862

Impact:

Unauthorized Stripe Operations

Severity:

CRITICAL RISK

(9.6)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

A critical authorization weakness in the Payload Stripe plugin allows an authenticated user who can reach the optional Stripe REST proxy to perform unintended Stripe operations. The risk arises when the proxy exposes Stripe functionality beyond the user's intended permissions or without sufficiently granular authorization checks.

A critical authorization weakness in the Payload Stripe plugin allows an authenticated user who can reach the optional Stripe REST proxy to perform unintended Stripe operations. The risk arises when the proxy exposes Stripe functionality beyond the user's intended permissions or without sufficiently granular authorization checks.

Affected context

This issue may occur in Payload deployments that enable the optional Stripe REST proxy through the @payloadcms/plugin-stripe integration. It is relevant when an authenticated account can access the proxy and the exposed operations are not constrained by appropriate authorization or capability checks.

This issue may occur in Payload deployments that enable the optional Stripe REST proxy through the @payloadcms/plugin-stripe integration. It is relevant when an authenticated account can access the proxy and the exposed operations are not constrained by appropriate authorization or capability checks.

Exploit preconditions

  • Attack surface: The enabled optional Stripe REST proxy
  • Required access: An authenticated Payload user who can reach the proxy
  • Trigger point: A request to a proxy endpoint that exposes Stripe functionality
  • Why exploitation is possible: The proxy may permit operations outside the user's intended authorization scope
  • Attack surface: The enabled optional Stripe REST proxy
  • Required access: An authenticated Payload user who can reach the proxy
  • Trigger point: A request to a proxy endpoint that exposes Stripe functionality
  • Why exploitation is possible: The proxy may permit operations outside the user's intended authorization scope

Why this happens

The underlying issue is excessive exposure of sensitive functionality combined with insufficient authorization enforcement. A REST proxy that forwards requests to a third-party financial API must explicitly restrict available operations and verify that each action is permitted for the requesting user. Failure to enforce those boundaries maps to CWE-749: Exposed Dangerous Method or Function and is also consistent with CWE-862: Missing Authorization.

The underlying issue is excessive exposure of sensitive functionality combined with insufficient authorization enforcement. A REST proxy that forwards requests to a third-party financial API must explicitly restrict available operations and verify that each action is permitted for the requesting user. Failure to enforce those boundaries maps to CWE-749: Exposed Dangerous Method or Function and is also consistent with CWE-862: Missing Authorization.

Potential impact

  • Unauthorized creation, modification, or deletion of Stripe resources may occur
  • Payment, customer, subscription, or billing data could be altered or exposed
  • Attackers may cause financial loss or business process disruption
  • Connected Payload and Stripe integrations could be abused for fraud or operational sabotage
  • Unauthorized creation, modification, or deletion of Stripe resources may occur
  • Payment, customer, subscription, or billing data could be altered or exposed
  • Attackers may cause financial loss or business process disruption
  • Connected Payload and Stripe integrations could be abused for fraud or operational sabotage

General mitigation guidance

Mitigation generally focuses on minimizing exposed Stripe functionality and enforcing authorization at every proxy operation.

Common defensive patterns include:

  • Exposing only the specific Stripe operations required by the application
  • Applying explicit allowlists for routes, methods, parameters, and resource types
  • Enforcing server-side authorization and tenant-boundary checks for every request
  • Avoiding reliance on client-controlled roles, identifiers, or operation names
  • Using least-privilege Stripe credentials and narrowly scoped integration permissions
  • Reducing configuration and endpoint exposure when the optional proxy is not required
  • Logging sensitive operations and applying rate limits and policy controls

Mitigation generally focuses on minimizing exposed Stripe functionality and enforcing authorization at every proxy operation.

Common defensive patterns include:

  • Exposing only the specific Stripe operations required by the application
  • Applying explicit allowlists for routes, methods, parameters, and resource types
  • Enforcing server-side authorization and tenant-boundary checks for every request
  • Avoiding reliance on client-controlled roles, identifiers, or operation names
  • Using least-privilege Stripe credentials and narrowly scoped integration permissions
  • Reducing configuration and endpoint exposure when the optional proxy is not required
  • Logging sensitive operations and applying rate limits and policy controls

How teams detect issues like this

Organizations can look for this class of issue through:

  • Static analysis and code review rules identifying generic request forwarding to Stripe APIs
  • Review of proxy route allowlists, authorization middleware, and tenant-isolation checks
  • Tests that attempt disallowed operations with accounts having different roles and scopes
  • Monitoring for unusual Stripe API activity, unexpected resource changes, and high-risk actions
  • Policy enforcement requiring explicit approval for externally exposed administrative or financial API methods
  • Automated security review tools that flag missing authorization checks and unrestricted proxy handlers

Organizations can look for this class of issue through:

  • Static analysis and code review rules identifying generic request forwarding to Stripe APIs
  • Review of proxy route allowlists, authorization middleware, and tenant-isolation checks
  • Tests that attempt disallowed operations with accounts having different roles and scopes
  • Monitoring for unusual Stripe API activity, unexpected resource changes, and high-risk actions
  • Policy enforcement requiring explicit approval for externally exposed administrative or financial API methods
  • Automated security review tools that flag missing authorization checks and unrestricted proxy handlers

Sources

SourceLink
github.comgithub.com/payloadcms/payload/commit/2f94a4205e5ba3ec0e91c92ed54f24f429826dd0
github.comgithub.com/payloadcms/payload/releases/tag/v3.90.0
github.comgithub.com/payloadcms/payload/security/advisories/GHSA-r9v2-gg2j-22q5

Frequently asked

questions

An authenticated user who can reach the enabled optional Stripe REST proxy may be able to invoke operations beyond their intended permissions.

No. The described condition requires authentication, although the severity depends on the privileges assigned to the account and the operations exposed by the proxy.

Restrict the proxy to an explicit allowlist of necessary operations and enforce server-side authorization for every request before it reaches Stripe.

Apply least privilege to users and Stripe credentials, test authorization boundaries for every API route, minimize exposed administrative functionality, and monitor high-impact financial operations.

An authenticated user who can reach the enabled optional Stripe REST proxy may be able to invoke operations beyond their intended permissions.

No. The described condition requires authentication, although the severity depends on the privileges assigned to the account and the operations exposed by the proxy.

Restrict the proxy to an explicit allowlist of necessary operations and enforce server-side authorization for every request before it reaches Stripe.

Apply least privilege to users and Stripe credentials, test authorization boundaries for every API route, minimize exposed administrative functionality, and monitor high-impact financial operations.

Find out what's already
exploitable in your codebase.