Summary
CVE-2026-90896 is a missing authentication vulnerability (CWE-306) in the MarcosCamara01 "Ecommerce Template" project that allows unauthenticated users to retrieve sensitive Stripe checkout session data via a public API endpoint. Any party who obtains a valid Stripe checkout session_id — values that are commonly exposed in post-payment redirect URLs, referrer headers, analytics logs, and browser history — can pull the full buyer record without logging in. The issue carries a CVSS score of 8.2 (High), driven by a high confidentiality impact with no authentication or user interaction required.
Technical details
- Root cause: The
GET /api/stripe/checkout_sessionsroute handler (src/app/api/stripe/checkout_sessions/route.ts) callsstripe.checkout.sessions.retrieve()directly, with no check that the requester is authenticated or owns the session being queried. - Inconsistent design: Sibling endpoints, such as
POST /api/stripe/payment, already enforce authentication viaauth.api.getSession(), making this GET endpoint an outlier that was left unprotected. - Trigger conditions: An attacker only needs a valid
session_idvalue. These IDs are exposed in the browser URL after checkout completion and can leak via referrer headers sent to third-party analytics/tracking scripts, server access logs, and browser history on shared devices. - Attack vector: Network-based, unauthenticated, low complexity — a single crafted GET request with a captured or guessed
session_idis sufficient. - Impact: Disclosure of personally identifiable buyer information, including full name, email address, phone number, billing/shipping address, payment amount, and internal user ID tied to the order. There is no integrity or availability impact.
Affected software
- MarcosCamara01 Ecommerce Template (GitHub repository
MarcosCamara01/ecommerce-template) - All versions/commits prior to the fix commit
91e273c69d976a3d205179e66e01fc399bfdd08b
Severity
- CVSS Score: 8.2 (High)
- CVSS Vector:
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Mitigation and recommended actions
- Immediate: Update to a version of the template that includes commit
91e273c69d976a3d205179e66e01fc399bfdd08bor later. This fix requires an active authenticated session (returning HTTP 401 for unauthenticated requests) and verifies thatcheckoutSession.metadata.userIdmatches the authenticated user’s ID (returning HTTP 403 on mismatch) before returning checkout session data. - If immediate patching is not possible:
- Restrict or disable public access to the
/api/stripe/checkout_sessionsGET endpoint at the reverse proxy or API gateway level until the fix is deployed. - Avoid exposing raw Stripe
session_idvalues in URLs passed to third-party analytics or tracking scripts, and scrub them from server access logs. - Monitor for anomalous, high-volume, or sequential requests to the checkout sessions endpoint, which may indicate session ID enumeration or scraping attempts.
- Rotate/invalidate any checkout sessions suspected of exposure and notify affected customers if unauthorized access is confirmed.
- Restrict or disable public access to the

