Saltar al contenido
CVE-2026-90896 ·
Alta · 14 de septiembre de 2026

Falta de autenticación en el endpoint de checkout session de Ecommerce Template permite la divulgación no autenticada de PII del comprador

S0
Secur0 CNA
CVE-2026-90896

Descripción

Falta de autenticación en una función crítica (CWE-306) en el manejador de consulta de sesiones de pago GET() (src/app/api/stripe/checkout_sessions/route.ts), expuesto en GET /api/stripe/checkout_sessions, en Ecommerce Template anteriores al commit 91e273c, que permite a un atacante remoto y no autenticado que disponga de un identificador válido de sesión de Stripe Checkout (cs_...) leer la sesión de pago completa del comprador, debido a que el manejador invoca stripe.checkout.sessions.retrieve() y devuelve el objeto resultante sin ninguna comprobación de autenticación ni de propiedad, a diferencia del endpoint hermano POST /api/stripe/payment, que sí exige autenticación mediante auth.api.getSession(). El objeto devuelto expone los datos personales del comprador (nombre completo, email, teléfono, dirección de facturación, importe pagado y el userId interno). El session_id necesario queda situado en la propia URL del comprador tras el pago (success_url = /result?session_id={CHECKOUT_SESSION_ID}), por lo que puede filtrarse mediante cabeceras Referer, herramientas de analítica y logs del servidor. Esto resulta en la divulgación de la información personal del comprador a un actor no autenticado.

Tipo de vulnerabilidad (CWE)

CWE-306: Missing Authentication for Critical Function

Versiones afectadas

Ecommerce Template en todas las versiones anteriores al commit 91e273c. El endpoint vulnerable se introdujo al crearse el fichero de ruta en el commit 95d08e6 (2023-09-14) y permaneció sin ningún control de acceso hasta la corrección. El repositorio no publica etiquetas ni releases y su package.json está fijado en 0.1.0, por lo que no existe una versión semántica de referencia; el rango afectado se expresa por commit. La corrección está contenida en el commit 91e273c (2026-08-01) sobre la rama master, que ninguna release publicada incorpora. Estado por defecto: no afectado.

Puntuación (CVSS 4.0)

Alta (8.2)

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

Solución

Actualizar a una build que incluya el commit 91e273c desplegando desde la rama master: el repositorio no publica etiquetas ni releases, por lo que no hay un número de versión corregida que fijar. La corrección añade una comprobación de autenticación mediante auth.api.getSession() que devuelve 401 cuando no hay sesión activa, y una comprobación de propiedad que compara checkoutSession.metadata.userId con el identificador del usuario autenticado y devuelve 403 cuando no coinciden, antes de devolver la sesión de pago.

Parche

Commit 91e273c

Créditos

  • Jaime Ramírez - finder (descubridor)
  • Darío Rivas Quero - analyst (analista)
  • Secur0 CNA - coordinator (coordinador)

Origen del descubrimiento: Externo

Registro oficial: CVE-2026-90896