Description
Ghostfolio is an open source wealth management software. Prior to version 3.4.0, Ghostfolio's Stripe checkout success-URL handler at `GET /api/v1/subscription/stripe/callback?checkoutSessionId=<id>` retrieves the Stripe Checkout Session by ID and unconditionally grants a Premium subscription to the session's `client_reference_id` — without ever checking `session.payment_status` or `session.status`. There is no separate Stripe webhook endpoint with `stripe-signature` verification; this callback is the sole code path that creates Stripe-driven subscriptions. Any authenticated user can self-grant a 1-year Premium subscription without ever paying. Version 3.4.0 rejects sessions unless `session.payment_status === 'paid'` AND `session.status === 'complete'` (fails closed). Additionally, new unique `stripeCheckoutSessionId` column → a session can't be redeemed twice (race-safe via DB unique constraint).
Published: 2026-08-07
Score: 6.5 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Ghostfolio versions earlier than 3.4.0 allow authenticated users to receive a full‑year Premium subscription by accessing a Stripe callback URL that skips validation of the session’s payment status and completion state. The flaw is a classic authorization bypass (CWE‑862) that lets an attacker elevate privileges by claiming paid access without actually completing the payment process.

Affected Systems

The vulnerability affects the open‑source Ghostfolio wealth‑management application before release 3.4.0. Users running any Ghostfolio version older than 3.4.0 are at risk if the /api/v1/subscription/stripe/callback endpoint is reachable and unprotected.

Risk and Exploitability

The CVSS score of 6.5 indicates moderate severity, and the EPSS score is not available; the vulnerability is not listed in the CISA KEV catalog. If an attacker can obtain or guess a valid Stripe checkout session ID, they can trigger the callback with an authenticated session and obtain a Premium subscription without payment. The exploit requires authentication to the Ghostfolio instance and is performed via an unauthenticated HTTP GET to the callback endpoint—a likely attack vector inferred from the description.

Generated by OpenCVE AI on August 8, 2026 at 00:20 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Ghostfolio to version 3.4.0 or later, which enforces checks that session.payment_status must be "paid" and session.status must be "complete" and generates a unique stripeCheckoutSessionId column to prevent re‑use of the same session
  • Restrict access to the /api/v1/subscription/stripe/callback endpoint so that only authorized operators can trigger it, or remove the endpoint entirely if not needed
  • Monitor account privileges for sudden new Premium subscriptions and investigate any unauthorized activations

Generated by OpenCVE AI on August 8, 2026 at 00:20 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 08 Aug 2026 00:45:00 +0000

Type Values Removed Values Added
First Time appeared Ghostfolio
Ghostfolio ghostfolio
Vendors & Products Ghostfolio
Ghostfolio ghostfolio

Fri, 07 Aug 2026 23:00:00 +0000

Type Values Removed Values Added
Description Ghostfolio is an open source wealth management software. Prior to version 3.4.0, Ghostfolio's Stripe checkout success-URL handler at `GET /api/v1/subscription/stripe/callback?checkoutSessionId=<id>` retrieves the Stripe Checkout Session by ID and unconditionally grants a Premium subscription to the session's `client_reference_id` — without ever checking `session.payment_status` or `session.status`. There is no separate Stripe webhook endpoint with `stripe-signature` verification; this callback is the sole code path that creates Stripe-driven subscriptions. Any authenticated user can self-grant a 1-year Premium subscription without ever paying. Version 3.4.0 rejects sessions unless `session.payment_status === 'paid'` AND `session.status === 'complete'` (fails closed). Additionally, new unique `stripeCheckoutSessionId` column → a session can't be redeemed twice (race-safe via DB unique constraint).
Title Ghostfolio has a Stripe subscription bypass
Weaknesses CWE-862
References
Metrics cvssV3_1

{'score': 6.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N'}


Subscriptions

Ghostfolio Ghostfolio
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-07T22:43:59.001Z

Reserved: 2026-05-18T19:50:18.695Z

Link: CVE-2026-47127

cve-icon Vulnrichment

No data.

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-08T00:30:17Z

Weaknesses