Falta de autenticación en la revalidación de caché de productos de Ecommerce Template permite denegación de servicio no autenticada
Descripción
Falta de autenticación en una función crítica (CWE-306) en la Server Action de revalidación de caché de productos revalidateProducts (src/app/actions.ts), en Ecommerce Template anteriores al commit ec97209, que permite a un atacante remoto y no autenticado forzar la expiración inmediata de toda la caché del catálogo de la tienda. El fichero declara "use server" a nivel de fichero, por lo que cada función exportada compila como una Server Action invocable por POST; revalidateProducts invoca updateTag("products") sin ninguna comprobación de sesión ni de rol, a diferencia de las funciones de solo lectura del mismo fichero, seguras por construcción. Dos componentes cliente de src/components/admin importan la función, lo que provoca que su identificador de Server Action quede compilado en un fragmento público de /_next/static que el middleware de administración (proxy.ts) no protege, permitiendo a cualquier usuario no autenticado extraer ese identificador del paquete público e invocar la acción directamente. Con cacheComponents activado, toda la tienda (portada, categorías, ficha de producto, búsqueda) se sirve desde entradas "use cache" generadas por getAllProducts, getCategoryProducts y getProduct, todas etiquetadas products con una vida de caché de horas. La invocación repetida y no autenticada de revalidateProducts mantiene esa caché permanentemente fría, obligando a cada visita real a recalcular el catálogo completo desde Postgres en lugar de servirse desde caché, degradando la disponibilidad de la tienda a coste casi nulo para el atacante.
Tipo de vulnerabilidad (CWE)
CWE-306: Missing Authentication for Critical Function
Versiones afectadas
Ecommerce Template en todas las versiones anteriores al commit ec97209. La función vulnerable se introdujo en el commit 4c7a666 (2026-01-18). 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 ec97209 (2026-09-08). Estado por defecto: no afectado.
Puntuación (CVSS 4.0)
Media (6.9)
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Solución
Actualizar a una build que incluya el commit ec97209. La corrección traslada revalidateProducts fuera del módulo "use server" a nivel de fichero a un módulo server-only, y restringe su único invocador alcanzable por red (GET /api/cron/catalog-sync) con una comprobación de credencial interna. No exportar mutaciones no autenticadas desde un módulo "use server" a nivel de fichero; proteger cualquier acción de invalidación de caché con una comprobación de sesión o de rol de administrador, o eliminar la acción invocable desde el cliente.
Parche
Commit ec97209
Créditos
- Robert Mihaila - finder (descubridor)
- Amirreza Fadaeizadeh Bidari - finder (descubridor)
- Darío Rivas Quero - analyst (analista)
- Secur0 CNA - coordinator (coordinador)
Origen del descubrimiento: Externo
Registro oficial: CVE-2026-91154