Live › vulnerability › CVE-2026-115450
Go to dashboardThe ecommerce template's cart endpoint accepts a product ID and a Stripe price ID as independent fields, so a logged-in user can pay the price of a cheap item while ordering a different product. Every Stripe price ID in the catalogue is public, so the mismatch needs no guessing and can be repeated without limit.
Summary written from the sources below. Check the originals before acting.
First seen by InfraStack 2026-10-23 21:57 UTC. All times on this page are UTC.
Teams running the MarcosCamara01 Ecommerce Template or a fork of it with Stripe checkout enabled. The flaw sits in the cart and payment path: POST /api/user/cart stores variantId and stripeId without checking they match, and POST /api/stripe/payment charges the stored stripeId. Stores that do not use this template, or that do not expose this cart flow, can skip it.
| Product | Ecosystem | Affected | Fixed in |
|---|---|---|---|
| MarcosCamara01/ecommerce-template | github | >= commit 2aa8ec53 (2025-11-16), < commit e6b364cd (2026-07-31) | e6b364cd668f2ba875cfa7f6d55c63e771715df7 |
0.1.0Each row is the first time that source carried this signal. The analyst’s rows are its own findings.
External Control of Assumed-Immutable Web Parameter (CWE-472) in the cart and checkout flow of MarcosCamara01 Ecommerce Template allows an authenticated user with no special privileges to be charged the price of one product while placing an order for another, because POST /api/user/cart accepts variantId, which determines what the order records, and stripeId, which determines what Stripe charges, as two independent fields of the request body, stores both on the cart row, and no check requires the stripeId to be the one that belongs to the variantId. POST /api/stripe/payment builds the Stripe Checkout line items from the stored value, as { price: item.stripeId, quantity }, so the amount charged is the amount of that Stripe price. The checkout.session.completed webhook then creates the order products from the variantId of the same cart row, so the order records a product that was not paid for. Every stripeId in the catalogue is readable by any visitor, so no value has to be guessed. This results in orders for goods at the price of the cheapest item in the catalogue, repeatable without limit, and in order records whose amount does not correspond to the product they list.
This page as .md · .json · in your agent: get_signal("CVE-2026-115450")
NVD data is provided by NIST and is public domain · EPSS scores by FIRST, used with attribution. Posts quoted belong to their authors.