Skip to main content

Ecommerce Template EUVDEUVD-2026-88333

| CVE-2026-91154 MEDIUM
Missing Authentication for Critical Function (CWE-306)
2026-09-28 Secur0 GHSA-v9ch-cf39-43vr
6.9
CVSS 4.0 · Vendor: Secur0
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Load public storefront bundle
  2. Delivery
    Extract revalidateProducts Server Action id from /_next/static chunk
  3. Exploit
    POST action id directly (no auth)
  4. Execution
    updateTag('products') expires entire cache
  5. Persist
    Loop to keep cache cold
  6. Impact
    Storefront reads catalog from Postgres, availability degrades

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication required for critical functions
MITRE ATT&CK

1 technique across 1 tactic: Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitable only when the deployed instance runs the vulnerable code (before commit ec97209) with Next.js cacheComponents enabled so storefront pages are served from 'use cache' entries tagged 'products' with an hours-long cacheLife - this is the condition that turns cache invalidation into meaningful availability impact. Additionally, the revalidateProducts action must be reachable: it becomes so because src/components/admin client components import it, forcing its Server Action id into a public /_next/static chunk, while the admin middleware in proxy.ts fails to gate the action endpoint. No authentication, user interaction, or special privileges are required (PR:N/UI:N); the practical limiter is that this is a self-hosted open-source template, so exposure depends on how each operator configured caching and middleware.

Impact

This is a genuine but strictly availability-scoped issue, not a high-severity emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N with VC:N/VI:N/VA:L) is internally consistent with the description: fully remote and unauthenticated with no complexity barriers, but the only impact is low availability degradation - no confidentiality or integrity loss. There is no EPSS score, no CISA KEV listing, and no public exploit code identified; the only references are the vendor patch commit and the reporter's advisory. SSVC-wise, exploitation is technically automatable (a trivial repeatable POST loop) but technical impact is 'partial' at best (cache denial forcing DB reads, not full service takedown), so this rates as track/act-later rather than a priority. The dominant risk-limiting factor is prevalence, not the vulnerability class: this is an open-source Next.js ecommerce starter template, so real-world blast radius depends entirely on how many derived deployments enabled cacheComponents and left the action ungated. Net: real but low-priority; the 6.9 base score overstates urgency because it does not weight the near-zero deployment footprint of the affected product.

Exploit ScenarioDerived

An unauthenticated attacker loads the storefront, extracts the compiled Server Action id for revalidateProducts from a public /_next/static JavaScript chunk, then repeatedly POSTs that action id directly to the site. Each call invalidates the 'products' cache tag, keeping the cacheComponents cache permanently cold so every visitor request falls through to Postgres, degrading storefront performance and availability at near-zero attacker cost. No public exploit code was identified at time of analysis, though the technique is fully described in the advisory.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 28, 2026

Unauthenticated remote attackers can repeatedly invoke the revalidateProducts Server Action in the MarcosCamara01 Ecommerce Template (all revisions before commit ec97209) to forcibly expire the entire storefront product cache, driving near-zero-cost cache thrash and availability degradation. The action lives in src/app/actions.ts under a file-scope "use server" directive and calls updateTag("products") with no session or role check, unlike the read-only actions in the same file; because two client components under src/components/admin import it, its Server Action id is compiled into a public /_next/static chunk that the proxy.ts admin middleware does not gate, so any remote user can harvest the id and POST it directly. Impact is strictly availability-scoped (CVSS 4.0 base 6.9; assessed CVSS 3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L) and the reachable condition is deployment-dependent: it matters when cacheComponents is enabled and storefront pages are served from 'use cache' entries tagged 'products' with an hours-long cacheLife, an open-source self-hosted template configuration chosen by each operator. No public exploit code was identified at time of analysis and there is no KEV confirmation of active exploitation.

RemediationAI

The fix is upstream in commit ec97209e6c7663cba7b5164468d6946cbfe2f19a (upstream fix available as a PR/commit; a released tagged patched version was not independently confirmed), so operators should update to that revision or later via https://github.com/MarcosCamara01/ecommerce-template/commit/ec97209e6c7663cba7b5164468d6946cbfe2f19a and re-verify the revalidateProducts action now enforces a session/role check. Until they can upgrade, the highest-value compensating control is to add an explicit authorization gate - a session and role assertion inside revalidateProducts (and any other mutating Server Action in src/app/actions.ts) plus a matching check in proxy.ts that covers Server Action POSTs rather than only admin page routes - noting the trade-off that any missed entry point reintroduces the issue and that middleware changes require careful testing against legitimate admin traffic. A second control is to stop the action id from being publicly discoverable by moving the admin import boundary so mutating actions are not pulled into client chunks, at the cost of refactoring admin components. Operators who cannot patch immediately can also reduce blast radius by disabling cacheComponents or shortening the "products" tag cacheLife from hours to minutes so that forced invalidation produces far less origin load, accepting slower page renders and higher baseline database traffic. Edge rate limiting or a WAF rule that throttles or blocks repeated POSTs carrying the Next-Action header from unauthenticated clients will blunt the loop but is fragile because the header is legitimate for normal Server Action traffic and tuning risks breaking storefront functionality, and any such rule should be scoped to the specific action id rather than all Server Action requests. Finally, ensure PostgreSQL connection limits and pool sizing can absorb a cold-cache surge, since that is where the degradation manifests. The reporter's advisory is at https://secur0.com/en/cna/cve-list/cve-2026-91154-missing-authentication-ecommerce-template-cache-revalidation-dos.

Affected VersionsENISA

Ecommerce Template 0 <ec97209

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause class is CWE-306 (Missing Authentication for Critical Function). Next.js App Router Server Actions are declared with a "use server" directive; when that directive sits at file scope, every exported function in the file is compiled into a POST-invokable Server Action with a generated, deterministic action id, and importing any of those functions from a client component causes the id to be emitted into the public /_next/static JavaScript bundle. In this template, src/app/actions.ts contains the mutating revalidateProducts function, which calls updateTag("products") without any session, role, or authorization check, while the read-only data actions in the same module are safe by construction because they only read. The privacy-relevant complication is Next.js caching: with cacheComponents enabled, getAllProducts, getCategoryProducts and getProduct produce "use cache" entries tagged "products" with an hours-long cacheLife, and those entries back the home, category, product and search pages. Because the invalidation tag is global to the storefront, one unauthenticated POST is enough to drop the whole catalogue cache, and repeated invocations keep it permanently cold so every visitor request falls through to PostgreSQL. The admin middleware in proxy.ts gates the admin routes but does not gate the Server Action endpoint, and combined with 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 this yields an unauthenticated, low-complexity, network-reachable availability weakness with no confidentiality or integrity impact and no scope change.

Know when Ecommerce Template gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Secur0) PRIMARY 6.9 MEDIUM
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
vuln.today AI 5.3 MEDIUM

Remote, unauthenticated, no interaction against the exposed Server Action (AV:N/AC:L/PR:N/UI:N); impact is limited to cache-denial performance degradation, so A:L and C:N/I:N.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (Secur0).

CVSS VectorVendor: Secur0

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Missing Authentication for Critical Function (CWE-306) in the product cache revalidation Server Action (src/app/actions.ts, revalidateProducts) in MarcosCamara01 Ecommerce Template before commit ec97209 allows a remote, unauthenticated attacker to force expiration of the entire storefront product cache at will. The file declares "use server" at file scope, so every exported function compiles into a POST-invokable Server Action; revalidateProducts calls updateTag("products") with no session or role check, unlike the read-only actions in the same file which are safe by construction. Two client components under src/components/admin import the function, which causes its Server Action id to be compiled into a public /_next/static chunk that the application's admin middleware (proxy.ts) does not gate, so any unauthenticated user can extract that id from the public bundle and invoke the action directly. With cacheComponents enabled, the entire storefront (home, categories, product pages, search) is served from "use cache" entries produced by getAllProducts, getCategoryProducts and getProduct, all tagged products with an hours-long cacheLife. Repeated unauthenticated invocation of revalidateProducts keeps that cache permanently cold, forcing every visitor's request to read the full product catalog from Postgres instead of serving from cache, degrading storefront availability at near-zero attacker cost.

Threat Intelligence Overview

EPSS Score
0.4%
Top 69% exploitable
Prevalence
Rare
open-source Next.js ecommerce starter template, no meaningful enterprise footprint
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy