CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-59817

CVE-2026-59817: Premium Membership Provisioning Bypass via Parameter Tampering in Ghost CMS

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 4, 2026·6 min read·2 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can obtain premium paid subscriptions for nominal costs by exploiting weak metadata sanitization and logical errors in Ghost's Stripe checkout integration.

An unauthenticated remote business logic vulnerability in Ghost CMS versions 6.27.0 through 6.43.1 allows attackers to bypass paid subscription gates. By injecting reserved metadata fields into public donation Stripe Checkout Sessions, attackers can obtain premium-tier memberships for arbitrary nominal amounts.

Vulnerability Overview

Ghost is an open-source content management system built on Node.js that enables subscription-based monetization, membership routing, and donations using Stripe. The platform relies on Stripe's hosted Checkout Sessions to securely handle credit card processing. The checkout flow handles operations such as purchasing premium memberships, processing single donations, and issuing gift cards.

To map these detached operations back to internal states, the CMS registers critical transaction parameters directly into Stripe's checkout session metadata. This architectural design relies on Stripe Webhooks to asynchronously inform the server which specific entitlements must be granted once payment is confirmed. This framework introduces an attack surface when user-supplied input parameters are processed without validation prior to payment initialization.

The flaw indexed as CVE-2026-59817 represents a classic parameter tampering and business logic bypass vulnerability in the routing of donation payments. Due to improper metadata sanitization, unauthenticated remote actors can inject control keys into Stripe sessions. When Stripe confirms payment completion, the backend accepts the modified metadata as authentic, resulting in privilege escalation.

Root Cause Analysis

The root cause of CVE-2026-59817 is a multi-step input validation and logical routing failure in the Ghost backend components handling member checkouts. The flow begins when a user initiates a donation payment through the public REST endpoint mapped to the _createDonationCheckoutSession controller function.

First, the application failed to verify if the donations feature was actually toggled on by administrators. It verified only if the Stripe service was structurally configured, allowing users to reach the donation setup codepath even on deployments where donations were disabled. This oversight granted access to an unauthenticated, arbitrary-amount checkout path.

Second, the controller did not enforce metadata boundaries. During session creation, the incoming HTTP request payload allowed arbitrary keys to be placed inside the metadata object. Because the controller did not sanitize or blocklist reserved internal identifiers, these keys were forwarded to the Stripe API and appended to the valid Stripe Session.

Finally, when Stripe transmitted the asynchronous checkout.session.completed event, the webhook consumer parsed the returned metadata to determine how to process the transaction. Rather than validating that the subscription purchase price matched the financial total processed, the handler executed routing solely based on the presence of boolean flags inside the metadata. This allowed a low-value donation payment to be routed to gift-subscription code paths.

Technical Code Analysis

Analyzing the source code diff reveals how the validation gaps were closed. The primary flaw was localized within router-controller.js and mitigated by enforcing configuration checks and stripping control tags.

The vulnerability is mitigated by implementing a strict set of reserved keys and introducing a validation check to guarantee that donations are actively enabled. Below is the code implementation showing the introduced metadata blocklist:

// Patched: Define reserved metadata keys that control application state
const RESERVED_CHECKOUT_METADATA_KEYS = new Set([
    'ghost_donation',
    'ghost_gift',
    'ghostSignupContext',
    'gift_token',
    'tier_id',
    'cadence',
    'duration'
]);
 
// Patched: Explicit sanitization function to strip reserved attributes
function removeReservedCheckoutMetadata(metadata) {
    if (!metadata || typeof metadata !== 'object') {
        return;
    }
    for (const key of RESERVED_CHECKOUT_METADATA_KEYS) {
        delete metadata[key];
    }
}

The corresponding webhook receiver in checkout-session-event-service.js was also patched to enforce strict boolean evaluations on Stripe metadata fields and prevent conflicting states. It now logs a warning and rejects executions where conflicting flow markers are present:

// Patched: Enforce strict type check on webhook processing
function isStripeMetadataTrue(value) {
    return value === true || value === 'true';
}
 
function hasConflictingCheckoutFlowMetadata(metadata) {
    return hasStripeMetadataKey(metadata, 'ghost_donation') && hasStripeMetadataKey(metadata, 'ghost_gift');
}

Attack Methodology and Proof of Concept

To exploit this vulnerability, an attacker identifies a target site running a vulnerable version of Ghost CMS and locates the endpoint for creating checkout sessions. The attack requires no authentication or valid cookie credentials.

The attacker crafts a POST request to /api/create-stripe-checkout-session/ with the transaction type configured to donation. This allows the attacker to specify an arbitrary nominal value, such as $1.00. The attacker embeds reserved parameter fields within the unsanitized metadata nested object, simulating a valid paid gift subscription configuration.

{
  "customerEmail": "attacker@example.com",
  "type": "donation",
  "amount": 100,
  "successUrl": "https://example.com/success",
  "cancelUrl": "https://example.com/cancel",
  "metadata": {
    "ghost_gift": "true",
    "gift_token": "attacker_controlled_token_string",
    "tier_id": "prod_premium_tier_id",
    "cadence": "year",
    "duration": "12"
  }
}

The vulnerable server accepts this payload, generates a Stripe checkout session link containing the tampered metadata, and returns it to the attacker. The attacker completes the Stripe payment flow of $1.00. The Stripe event processor issues a webhook to Ghost, which identifies ghost_gift: "true" in the metadata, bypasses the payment tier check, and provisions a 12-month premium access token to the designated email.

Impact Assessment

The impact of CVE-2026-59817 is localized privilege escalation and monetary evasion, with a CVSS v3.1 score of 5.3 (Medium). The flaw does not present a mechanism for remote code execution, command injection, or administrative panel access, nor does it allow access to back-end system databases.

The operational impact is restricted to the bypass of premium content subscription fees. Threat actors can use the vulnerability to obtain active, long-term premium memberships without paying the defined registration fees, leading to revenue loss for creators and publishing entities using the platform.

Because the vulnerability is confined to CMS billing logic, no customer records, payment details, or personal identifying information are leaked or modified. It does not affect system-level availability or service reliability.

Remediation and Mitigation

The definitive remediation is to upgrade Ghost CMS to version 6.44.0 or newer. This update implements input scrubbing for public-facing Stripe endpoints and hardens the asynchronous validation of metadata properties within the Stripe webhook controllers.

If upgrading is not immediately possible, administrators should disable the Tips and Donations feature globally in the Ghost management console. This limits the ability of external actors to trigger custom-amount payment processes.

Administrators may also apply Web Application Firewall rules at the CDN or proxy layer (such as Cloudflare or Nginx) to inspect and block POST requests to /api/create-stripe-checkout-session/ if the payload contains any keys in the metadata object matching ghost_gift, gift_token, or tier_id.

Official Patches

TryGhostRemediation Commit for Metadata Whitelisting
TryGhostRemediation Commit for Settings Validation

Fix Analysis (2)

Technical Appendix

CVSS Score
5.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
EPSS Probability
0.26%
Top 83% most exploited

Affected Systems

Ghost CMS

Affected Versions Detail

Product
Affected Versions
Fixed Version
Ghost
TryGhost
>= 6.27.0, < 6.44.06.44.0
AttributeDetail
CWE IDCWE-915
Attack VectorNetwork (AV:N)
CVSS Score5.3 (Medium)
EPSS Score0.00257 (17.25 percentile)
ImpactIntegrity Level Low (I:L), No Confidentiality/Availability Impact
Exploit StatusProof-of-concept validated
KEV StatusNot Listed in CISA KEV

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1548Abuse Elevation Control Mechanism
Privilege Escalation
CWE-915
Improperly Controlled Modification of Dynamically-Determined Object Attributes

The application allows user-controlled input to modify object attributes or metadata that should only be controlled by the server, leading to business logic bypass.

Vulnerability Timeline

Ghost release candidate version 6.43.2-rc.0 tagged to begin testing remediation logic
2026-05-29
Remediation commits ee7b991 and cab716c pushed addressing setting validation and sanitization
2026-06-03
Official GitHub Security Advisory GHSA-xm43-3m56-w3wf published
2026-07-09
National Vulnerability Database publishes CVE-2026-59817
2026-07-09

References & Sources

  • [1]GitHub Security Advisory GHSA-xm43-3m56-w3wf
  • [2]GitHub Pull Request #28351
  • [3]GitHub Pull Request #28352

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•43 minutes ago•CVE-2026-53947
5.3

CVE-2026-53947: Observable Response Discrepancy (User Enumeration) in Ghost CMS

CVE-2026-53947 is an observable response discrepancy (CWE-204) in Ghost CMS that permits unauthenticated remote user enumeration via the passwordless magic link sign-in endpoint.

Amit Schendel
Amit Schendel
0 views•7 min read
•about 3 hours ago•CVE-2026-70494
8.1

CVE-2026-70494: Broken Access Control in Open WebUI Folder Deletion Endpoint

A critical broken access control vulnerability in Open WebUI (v0.10.0 to v0.11.0) allows authenticated write-collaborators to delete shared subfolders they do not own. Because deletion triggers a backend cascade using the folder owner's identity, this results in unauthorized permanent deletion of the owner's nested chats, messages, and files.

Alon Barad
Alon Barad
2 views•7 min read
•about 4 hours ago•CVE-2026-70485
7.1

CVE-2026-70485: Server-Side Request Forgery in Open WebUI via NAT64 IP Wrapping Bypass

Open WebUI is susceptible to Server-Side Request Forgery (SSRF) when deployed in networks with NAT64 translation gateways. Authenticated users can bypass host validation checks by encapsulating internal or cloud-metadata IPv4 addresses within globally-routable IPv6 transition prefixes.

Alon Barad
Alon Barad
6 views•5 min read
•about 5 hours ago•CVE-2026-70474
7.6

CVE-2026-70474: Incorrect Authorization and Missing Authentication in Flowise OAuth2 Credential Endpoints

A critical authorization flaw exists in Flowise, a popular drag-and-drop orchestrator for building customized Large Language Model flows. Prior to version 3.1.3, multiple OAuth2 credential endpoints do not filter database lookups by the requesting entity's workspace context. This omission, combined with the exclusion of several endpoints from the global authentication pipeline, permits unauthenticated remote actors to access, manipulate, or steal access tokens linked to external service integrations.

Alon Barad
Alon Barad
2 views•5 min read
•about 6 hours ago•GHSA-RWRP-9823-P2XQ
6.5

GHSA-RWRP-9823-P2XQ: Incomplete Credential Redaction in Flowise API

An incomplete credential redaction mechanism in Flowise allows authenticated users with standard view permissions to retrieve sensitive decrypted third-party credentials in plaintext.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 7 hours ago•CVE-2026-69262
7.1

CVE-2026-69262: Incorrect Authorization Flaw in Flowise Chatflow Deletion Endpoint

CVE-2026-69262 is a high-severity incorrect authorization vulnerability (CWE-863) within the Flowise drag-and-drop LLM flow platform. Prior to version 3.1.3, Flowise did not enforce resource-type validation on its deletion endpoint. Although routing middleware ensured users held deletion privileges for either chatflows or agentflows, the service level lacked validation checks to verify whether the target resource matched the user's specific permissions. Consequently, an authenticated user with only agentflow deletion permissions could delete arbitrary chatflow configurations, leading to unauthorized state modification and service disruption.

Amit Schendel
Amit Schendel
4 views•7 min read