/

CVE-2026-103266

Severity:

HIGH RISK

(7.1)

Authorization Bypass (CWE-863) in Ghost Stripe Flow

CVE-2026-103266

Deferred

Vulnerability type

Category:

Authorization Bypass

CWE:

CWE-863

Impact:

Unauthorized account modification, subscription manipulation, and newsletter content injection

Severity:

HIGH RISK

(7.1)

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

Ghost contains an authorization flaw in its Stripe Checkout flow that may let an unauthenticated remote attacker attach a paid subscription to an existing member and alter that member's name. The same issue may allow newsletter content injection, which could be rendered as HTML or cross-site scripting depending on the recipient's email client.

Affected context

The issue affects Ghost deployments using the Stripe Checkout integration within the affected version range. Risk arises when checkout-related requests do not sufficiently verify that the requester is authorized to associate a subscription or modify member-associated data, allowing attacker-controlled values to reach member and newsletter workflows.

Exploit preconditions

  • Attack surface: Publicly reachable Stripe Checkout and member-management flows
  • Required access: No authentication may be required
  • Trigger point: Processing of checkout-related requests and subsequent member or newsletter updates
  • Why exploitation is possible: Authorization checks may fail to bind the requested subscription and content changes to an appropriately authorized member or transaction

Why this happens

The underlying bug is an authorization decision failure, mapping to CWE-863: Incorrect Authorization. The application appears to trust attacker-controlled checkout or member-related references without consistently enforcing that the requester and transaction are permitted to affect the targeted member and associated content. Inadequate output handling may then allow injected values to reach newsletter rendering contexts.

Potential impact

  • An attacker may attach a paid subscription to another member
  • An attacker may alter a member's displayed name
  • Newsletter content may be modified or injected
  • Recipients' email clients may render injected HTML
  • Some recipients could experience cross-site scripting effects
  • Member trust, billing records, or communication integrity could be affected

General mitigation guidance

Mitigation generally focuses on enforcing authorization at every state-changing

operation in the checkout and member-management lifecycle.

Common defensive patterns include:

  • Bind subscriptions to server-verified checkout sessions and intended member identities
  • Require explicit authorization checks before modifying member or billing data
  • Avoid trusting client-supplied member identifiers, names, or workflow state
  • Validate and canonicalize values before storing or using them in newsletters
  • Encode or sanitize content for the specific email and HTML rendering context
  • Apply least privilege to payment, member, and newsletter components
  • Use secure-by-default templates that treat member-controlled values as text
  • Add transaction integrity checks and audit logging for subscription changes

How teams detect issues like this

Detection approaches may include:

  • Static analysis for state-changing endpoints that lack object-level authorization checks
  • Code review of checkout callbacks, member identifiers, and subscription-association logic
  • Tests that attempt cross-member access using unauthenticated and mismatched workflow state
  • Inspection for direct insertion of member-controlled data into newsletter HTML
  • Policy enforcement requiring authorization, validation, and context-aware output encoding
  • Monitoring for unusual subscription attachments, unexpected member changes, and anomalous newsletter edits
  • Automated application security testing or code review tools that evaluate authorization boundaries

Sources

SourceLink
github.comgithub.com/TryGhost/Ghost/security/advisories/GHSA-qppx-rw6v-xjqf
vulncheck.comvulncheck.com/advisories/ghost-5.2.0-before-6.62.0-unauthenticated-stripe-checkout-account-modification

Frequently asked

questions

Yes. The described attack can be initiated remotely through the public checkout

flow, and authentication may not be required.

The attacker generally needs only network access to the exposed Stripe Checkout

or related member workflow. They do not necessarily need an existing account.

Enforce server-side, object-level authorization for every subscription and member

change, bind operations to verified checkout state, and encode or sanitize

content before newsletter rendering.

Use negative authorization tests, do not trust client-controlled identifiers,

validate workflow transitions, and apply context-aware output encoding to all

member-supplied content.

Find out what's already
exploitable in your codebase.