CVE-2026-91154 (GCVE-0-2026-91154)

Vulnerability from cvelistv5 – Published: 2026-09-28 15:29 – Updated: 2026-09-28 17:52 X_Open Source
VLAI
Title
Missing authentication in Ecommerce Template product cache revalidation allows unauthenticated denial of service
Summary
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.
SSVC
Exploitation: none Automatable: yes Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-28 17:52 UTC
CWE
  • CWE-306 - Missing Authentication for Critical Function
References
Impacted products
Vendor Product Version CPE status
MarcosCamara01 Ecommerce Template Affected: 0 , < ec97209 (custom)
    cpe:2.3:a:marcoscamara01:ecommerce-template:*:*:*:*:*:*:*:*
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-91154",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "yes"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-09-28T17:52:26.669048Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-09-28T17:52:40.759Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "modules": [
            "Product cache revalidation Server Action"
          ],
          "product": "Ecommerce Template",
          "programFiles": [
            "src/app/actions.ts"
          ],
          "repo": "https://github.com/MarcosCamara01/ecommerce-template",
          "vendor": "MarcosCamara01",
          "versions": [
            {
              "lessThan": "ec97209",
              "status": "affected",
              "version": "0",
              "versionType": "custom"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:a:marcoscamara01:ecommerce-template:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "ec97209",
                  "versionStartIncluding": "0",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ],
          "operator": "OR"
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "Robert Mihaila"
        },
        {
          "lang": "en",
          "type": "finder",
          "value": "Amirreza Fadaeizadeh Bidari"
        },
        {
          "lang": "en",
          "type": "analyst",
          "value": "Dario Rivas Quero"
        },
        {
          "lang": "en",
          "type": "coordinator",
          "value": "Secur0 CNA"
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eMissing Authentication for Critical Function (CWE-306) in the product cache revalidation Server Action (\u003ccode\u003esrc/app/actions.ts\u003c/code\u003e, \u003ccode\u003erevalidateProducts\u003c/code\u003e) in MarcosCamara01 Ecommerce Template before commit \u003ccode\u003eec97209\u003c/code\u003e allows a remote, unauthenticated attacker to force expiration of the entire storefront product cache at will. The file declares \u003ccode\u003e\"use server\"\u003c/code\u003e at file scope, so every exported function compiles into a POST-invokable Server Action; \u003ccode\u003erevalidateProducts\u003c/code\u003e calls \u003ccode\u003eupdateTag(\"products\")\u003c/code\u003e with no session or role check, unlike the read-only actions in the same file which are safe by construction. Two client components under \u003ccode\u003esrc/components/admin\u003c/code\u003e import the function, which causes its Server Action id to be compiled into a public \u003ccode\u003e/_next/static\u003c/code\u003e chunk that the application\u0027s admin middleware (\u003ccode\u003eproxy.ts\u003c/code\u003e) does not gate, so any unauthenticated user can extract that id from the public bundle and invoke the action directly. With \u003ccode\u003ecacheComponents\u003c/code\u003e enabled, the entire storefront (home, categories, product pages, search) is served from \u003ccode\u003e\"use cache\"\u003c/code\u003e entries produced by \u003ccode\u003egetAllProducts\u003c/code\u003e, \u003ccode\u003egetCategoryProducts\u003c/code\u003e and \u003ccode\u003egetProduct\u003c/code\u003e, all tagged \u003ccode\u003eproducts\u003c/code\u003e with an hours-long \u003ccode\u003ecacheLife\u003c/code\u003e. Repeated unauthenticated invocation of \u003ccode\u003erevalidateProducts\u003c/code\u003e keeps that cache permanently cold, forcing every visitor\u0027s request to read the full product catalog from Postgres instead of serving from cache, degrading storefront availability at near-zero attacker cost.\u003c/p\u003e"
            }
          ],
          "value": "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\u0027s 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\u0027s request to read the full product catalog from Postgres instead of serving from cache, degrading storefront availability at near-zero attacker cost."
        }
      ],
      "impacts": [
        {
          "capecId": "CAPEC-1",
          "descriptions": [
            {
              "lang": "en",
              "value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV4_0": {
            "Automatable": "NOT_DEFINED",
            "Recovery": "NOT_DEFINED",
            "Safety": "NOT_DEFINED",
            "attackComplexity": "LOW",
            "attackRequirements": "NONE",
            "attackVector": "NETWORK",
            "baseScore": 6.9,
            "baseSeverity": "MEDIUM",
            "exploitMaturity": "NOT_DEFINED",
            "privilegesRequired": "NONE",
            "providerUrgency": "NOT_DEFINED",
            "subAvailabilityImpact": "NONE",
            "subConfidentialityImpact": "NONE",
            "subIntegrityImpact": "NONE",
            "userInteraction": "NONE",
            "valueDensity": "NOT_DEFINED",
            "vectorString": "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",
            "version": "4.0",
            "vulnAvailabilityImpact": "LOW",
            "vulnConfidentialityImpact": "NONE",
            "vulnIntegrityImpact": "NONE",
            "vulnerabilityResponseEffort": "NOT_DEFINED"
          },
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "GENERAL"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "cweId": "CWE-306",
              "description": "CWE-306 Missing Authentication for Critical Function",
              "lang": "en",
              "type": "CWE"
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-28T15:29:03.261Z",
        "orgId": "4daa8cea-433a-44bd-9456-53b127fc289a",
        "shortName": "Secur0"
      },
      "references": [
        {
          "tags": [
            "patch"
          ],
          "url": "https://github.com/MarcosCamara01/ecommerce-template/commit/ec97209e6c7663cba7b5164468d6946cbfe2f19a"
        },
        {
          "tags": [
            "third-party-advisory",
            "technical-description"
          ],
          "url": "https://secur0.com/en/cna/cve-list/cve-2026-91154-missing-authentication-ecommerce-template-cache-revalidation-dos"
        }
      ],
      "solutions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eUpdate to a build including commit \u003ccode\u003eec97209\u003c/code\u003e, which moves \u003ccode\u003erevalidateProducts\u003c/code\u003e out of the file-scoped \u003ccode\u003e\"use server\"\u003c/code\u003e module into a server-only module and restricts its only network-reachable caller (\u003ccode\u003eGET /api/cron/catalog-sync\u003c/code\u003e) with an internal credential check. Do not export unauthenticated mutations from a file-scoped \u003ccode\u003e\"use server\"\u003c/code\u003e module; gate any cache-invalidation action behind an admin/session check or remove the client-callable export entirely.\u003c/p\u003e"
            }
          ],
          "value": "Update to a build including commit ec97209, which moves revalidateProducts out of the file-scoped \"use server\" module into a server-only module and restricts its only network-reachable caller (GET /api/cron/catalog-sync) with an internal credential check. Do not export unauthenticated mutations from a file-scoped \"use server\" module; gate any cache-invalidation action behind an admin/session check or remove the client-callable export entirely."
        }
      ],
      "source": {
        "discovery": "EXTERNAL"
      },
      "tags": [
        "x_open-source"
      ],
      "title": "Missing authentication in Ecommerce Template product cache revalidation allows unauthenticated denial of service"
    }
  },
  "cveMetadata": {
    "assignerOrgId": "4daa8cea-433a-44bd-9456-53b127fc289a",
    "assignerShortName": "Secur0",
    "cveId": "CVE-2026-91154",
    "datePublished": "2026-09-28T15:29:03.261Z",
    "dateReserved": "2026-09-14T21:05:54.953Z",
    "dateUpdated": "2026-09-28T17:52:40.759Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "modules": [
                  "Product cache revalidation Server Action"
                ],
                "product": "Ecommerce Template",
                "programFiles": [
                  "src/app/actions.ts"
                ],
                "repo": "https://github.com/MarcosCamara01/ecommerce-template",
                "vendor": "MarcosCamara01",
                "versions": [
                  {
                    "lessThan": "ec97209",
                    "status": "affected",
                    "version": "0",
                    "versionType": "custom"
                  }
                ]
              }
            ],
            "source": "4daa8cea-433a-44bd-9456-53b127fc289a"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "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\u0027s 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\u0027s request to read the full product catalog from Postgres instead of serving from cache, degrading storefront availability at near-zero attacker cost."
          }
        ],
        "id": "CVE-2026-91154",
        "lastModified": "2026-09-28T18:17:26.467",
        "metrics": {
          "cvssMetricV40": [
            {
              "cvssData": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "availabilityRequirement": "NOT_DEFINED",
                "baseScore": 6.9,
                "baseSeverity": "MEDIUM",
                "confidentialityRequirement": "NOT_DEFINED",
                "exploitMaturity": "NOT_DEFINED",
                "integrityRequirement": "NOT_DEFINED",
                "modifiedAttackComplexity": "NOT_DEFINED",
                "modifiedAttackRequirements": "NOT_DEFINED",
                "modifiedAttackVector": "NOT_DEFINED",
                "modifiedPrivilegesRequired": "NOT_DEFINED",
                "modifiedSubAvailabilityImpact": "NOT_DEFINED",
                "modifiedSubConfidentialityImpact": "NOT_DEFINED",
                "modifiedSubIntegrityImpact": "NOT_DEFINED",
                "modifiedUserInteraction": "NOT_DEFINED",
                "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
                "modifiedVulnConfidentialityImpact": "NOT_DEFINED",
                "modifiedVulnIntegrityImpact": "NOT_DEFINED",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
                "version": "4.0",
                "vulnAvailabilityImpact": "LOW",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "source": "4daa8cea-433a-44bd-9456-53b127fc289a",
              "type": "Secondary"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2026-91154",
                "options": [
                  {
                    "exploitation": "none"
                  },
                  {
                    "automatable": "yes"
                  },
                  {
                    "technicalImpact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-09-28T17:52:26.669048Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2026-09-28T16:17:17.110",
        "references": [
          {
            "source": "4daa8cea-433a-44bd-9456-53b127fc289a",
            "url": "https://github.com/MarcosCamara01/ecommerce-template/commit/ec97209e6c7663cba7b5164468d6946cbfe2f19a"
          },
          {
            "source": "4daa8cea-433a-44bd-9456-53b127fc289a",
            "url": "https://secur0.com/en/cna/cve-list/cve-2026-91154-missing-authentication-ecommerce-template-cache-revalidation-dos"
          }
        ],
        "sourceIdentifier": "4daa8cea-433a-44bd-9456-53b127fc289a",
        "vulnStatus": "Received",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-306"
              }
            ],
            "source": "4daa8cea-433a-44bd-9456-53b127fc289a",
            "type": "Secondary"
          }
        ]
      }
    },
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-91154",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-28T17:52:26.669048Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-28T17:52:36.424Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "modules": [
                "Product cache revalidation Server Action"
              ],
              "product": "Ecommerce Template",
              "programFiles": [
                "src/app/actions.ts"
              ],
              "repo": "https://github.com/MarcosCamara01/ecommerce-template",
              "vendor": "MarcosCamara01",
              "versions": [
                {
                  "lessThan": "ec97209",
                  "status": "affected",
                  "version": "0",
                  "versionType": "custom"
                }
              ]
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:marcoscamara01:ecommerce-template:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "ec97209",
                      "versionStartIncluding": "0",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "OR"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Robert Mihaila"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Amirreza Fadaeizadeh Bidari"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Dario Rivas Quero"
            },
            {
              "lang": "en",
              "type": "coordinator",
              "value": "Secur0 CNA"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMissing Authentication for Critical Function (CWE-306) in the product cache revalidation Server Action (\u003ccode\u003esrc/app/actions.ts\u003c/code\u003e, \u003ccode\u003erevalidateProducts\u003c/code\u003e) in MarcosCamara01 Ecommerce Template before commit \u003ccode\u003eec97209\u003c/code\u003e allows a remote, unauthenticated attacker to force expiration of the entire storefront product cache at will. The file declares \u003ccode\u003e\"use server\"\u003c/code\u003e at file scope, so every exported function compiles into a POST-invokable Server Action; \u003ccode\u003erevalidateProducts\u003c/code\u003e calls \u003ccode\u003eupdateTag(\"products\")\u003c/code\u003e with no session or role check, unlike the read-only actions in the same file which are safe by construction. Two client components under \u003ccode\u003esrc/components/admin\u003c/code\u003e import the function, which causes its Server Action id to be compiled into a public \u003ccode\u003e/_next/static\u003c/code\u003e chunk that the application\u0027s admin middleware (\u003ccode\u003eproxy.ts\u003c/code\u003e) does not gate, so any unauthenticated user can extract that id from the public bundle and invoke the action directly. With \u003ccode\u003ecacheComponents\u003c/code\u003e enabled, the entire storefront (home, categories, product pages, search) is served from \u003ccode\u003e\"use cache\"\u003c/code\u003e entries produced by \u003ccode\u003egetAllProducts\u003c/code\u003e, \u003ccode\u003egetCategoryProducts\u003c/code\u003e and \u003ccode\u003egetProduct\u003c/code\u003e, all tagged \u003ccode\u003eproducts\u003c/code\u003e with an hours-long \u003ccode\u003ecacheLife\u003c/code\u003e. Repeated unauthenticated invocation of \u003ccode\u003erevalidateProducts\u003c/code\u003e keeps that cache permanently cold, forcing every visitor\u0027s request to read the full product catalog from Postgres instead of serving from cache, degrading storefront availability at near-zero attacker cost.\u003c/p\u003e"
                }
              ],
              "value": "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\u0027s 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\u0027s request to read the full product catalog from Postgres instead of serving from cache, degrading storefront availability at near-zero attacker cost."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.9,
                "baseSeverity": "MEDIUM",
                "exploitMaturity": "NOT_DEFINED",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "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",
                "version": "4.0",
                "vulnAvailabilityImpact": "LOW",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-306",
                  "description": "CWE-306 Missing Authentication for Critical Function",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-28T15:29:03.261Z",
            "orgId": "4daa8cea-433a-44bd-9456-53b127fc289a",
            "shortName": "Secur0"
          },
          "references": [
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MarcosCamara01/ecommerce-template/commit/ec97209e6c7663cba7b5164468d6946cbfe2f19a"
            },
            {
              "tags": [
                "third-party-advisory",
                "technical-description"
              ],
              "url": "https://secur0.com/en/cna/cve-list/cve-2026-91154-missing-authentication-ecommerce-template-cache-revalidation-dos"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eUpdate to a build including commit \u003ccode\u003eec97209\u003c/code\u003e, which moves \u003ccode\u003erevalidateProducts\u003c/code\u003e out of the file-scoped \u003ccode\u003e\"use server\"\u003c/code\u003e module into a server-only module and restricts its only network-reachable caller (\u003ccode\u003eGET /api/cron/catalog-sync\u003c/code\u003e) with an internal credential check. Do not export unauthenticated mutations from a file-scoped \u003ccode\u003e\"use server\"\u003c/code\u003e module; gate any cache-invalidation action behind an admin/session check or remove the client-callable export entirely.\u003c/p\u003e"
                }
              ],
              "value": "Update to a build including commit ec97209, which moves revalidateProducts out of the file-scoped \"use server\" module into a server-only module and restricts its only network-reachable caller (GET /api/cron/catalog-sync) with an internal credential check. Do not export unauthenticated mutations from a file-scoped \"use server\" module; gate any cache-invalidation action behind an admin/session check or remove the client-callable export entirely."
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "tags": [
            "x_open-source"
          ],
          "title": "Missing authentication in Ecommerce Template product cache revalidation allows unauthenticated denial of service"
        }
      },
      "cveMetadata": {
        "assignerOrgId": "4daa8cea-433a-44bd-9456-53b127fc289a",
        "assignerShortName": "Secur0",
        "cveId": "CVE-2026-91154",
        "datePublished": "2026-09-28T15:29:03.261Z",
        "dateReserved": "2026-09-14T21:05:54.953Z",
        "dateUpdated": "2026-09-28T17:52:40.759Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…