vendure-core

Ecosystem: npm

Downloads:

Vulnerabilities from the last (months)
  • 2CriticalAffects 4 versions
  • 1HighAffects 1 version
  • 0MediumAffects 0 versions
  • 2ModerateAffects 2 versions
  • 2LowAffects 2 versions
Severity distribution (all time)
7vulnerabilities
  • Critical2 (28.6%)
  • High1 (14.3%)
  • Medium0 (0.0%)
  • Moderate2 (28.6%)
  • Low2 (28.6%)

Monthly breakdown

  • Critical
  • High
  • Medium
  • Moderate
  • Low
  • 3 vulnerabilities
    • Critical: 1
    • High: 1
    • Medium: 0
    • Moderate: 1
    • Low: 0
  • 1 vulnerabilities
    • Critical: 1
    • High: 0
    • Medium: 0
    • Moderate: 0
    • Low: 0
  • 1 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 0
    • Low: 1
  • 1 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 1
    • Low: 0
  • 1 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 0
    • Low: 1

Vulnerabilities (7)

Known vulnerabilities affecting vendure-core, based on data from OSV.

Vulnerabilities affecting vendure-core
IDSeveritySummaryAffected versionsPublishedSource
GHSA-6j36-r6pr-59x4CriticalVendure affected by external-authentication account takeover: external login linked to a pre-existing account by email without verification# External-authentication account takeover: external login linked to a pre-existing account by email without requiring verification **Package:** @vendure/core (vendure-ecommerce/vendure, latest master) · > [!IMPORTANT] > This vulnerability **only affects deployments that use external / social authentication** (an `AuthenticationStrategy` other than the built-in native email/password strategy) where that strategy can return an email address the external provider has **not verified** the user owns. **You are affected if all of these are true:** - Your store configures one or more external `A
  • < 3.7.0
GitHub (opens in a new tab)
GHSA-jgm3-qmp2-c4p7HighVendure: Unauthenticated ReDoS via `regex` filter on SQLite backends### Summary > [!IMPORTANT] > Only instances running on the SQLite driver (better-sqlite3) are affected; SQLite is usually used in development/testing backend, so production deployments on PostgreSQL or MySQL/MariaDB are unaffected. The `StringOperators.regex` filter exposed on the public Shop GraphQL API is evaluated inside the Node.js event loop via a synchronous SQLite user-defined function (UDF). Supplying a catastrophically backtracking pattern blocks the entire event loop, causing a complete denial of service with no authentication required. --- ### Details Vendure registers a JavaS
  • < 3.6.5
GitHub (opens in a new tab)
GHSA-xf65-r35x-wmmvModerateVendure: Shop API list queries can return non-public entities when filterOperator is ORThe Shop API `products`, `collections` and `facets` queries inject a mandatory filter to restrict results to publicly-visible entities (`Product.enabled = true`, `Collection.isPrivate = false`, `Facet.isPrivate = false`). This injected guard was combined with the caller-supplied filter using the caller-controlled `filterOperator`. When a caller sets `filterOperator: OR`, the guard is OR-combined instead of AND-combined, so a caller can retrieve disabled products and private collections/facets by supplying a predicate that matches them. ### Impact Exposure of catalog entities intended to be hi
  • >= 1.0.0, < 3.6.5
GitHub (opens in a new tab)
GHSA-9pp3-53p2-ww9vCritical@vendure/core has a SQL Injection vulnerability## Summary An unauthenticated SQL injection vulnerability exists in the Vendure Shop API. A user-controlled query string parameter is interpolated directly into a raw SQL expression without parameterization or validation, allowing an attacker to execute arbitrary SQL against the database. This affects all supported database backends (PostgreSQL, MySQL/MariaDB, SQLite). The Admin API is also affected, though exploitation there requires authentication. ## Affected versions - `@vendure/core` < 2.3.4 - `@vendure/core` >= 3.0.0, < 3.5.7 - `@vendure/core` >= 3.6.0, < 3.6.2 Note: versions 2.3.4
  • >= 3.0.0, < 3.5.7
  • >= 3.6.0, < 3.6.2
  • >= 1.7.4, < 2.3.4
GitHub (opens in a new tab)
GHSA-6f65-4fv2-wwchLowVendure vulnerable to timing attack that enables user enumeration in NativeAuthenticationStrategy### Summary The `NativeAuthenticationStrategy.authenticate()` method is vulnerable to a timing attack that allows attackers to enumerate valid usernames (email addresses). ### Details In `packages/core/src/config/auth/native-authentication-strategy.ts`, the authenticate method returns immediately if a user is not found: ```typescript const user = await this.userService.getUserByEmailAddress(ctx, data.username); if (!user) { return false; // Instant return (~1-5ms) } const passwordMatch = await this.verifyUserPassword(ctx, user.id, data.password); // Password check takes ~200-400ms with b
  • < 3.5.3
GitHub (opens in a new tab)
GHSA-wm63-7627-ch33Moderate@vendure/core's insecure currencyCode handling allows wrong payment amounts### Impact Currently, in many Vendure deployments it's possible to select any currencyCode (really any, doesn't need to be assigned to the channel) and pay through Mollie and Stripe in that particular currencyCode. The prices are not transformed. The result is the Order is in Payment Settled in the foreign currency. See SS, CZK is not in the channel. I've tested with Mollie and Stripe it both works. **Further notes** After looking into this further and with help from the comments below, the root cause of this vulnerability is the ability to specify an arbitrary `currencyCode` as a query par
  • < 2.1.3
GitHub (opens in a new tab)
GHSA-h9wq-xcqx-mqxmLowVendure Cross Site Request Forgery vulnerability impacting all API requests### Impact Vendure is an e-commerce GraphQL framework with a number of APIs and different levels of authorization. By default the Cookie settings are insecure, having the SameSite setting as false which results in not having one (originates from the cookie-session npm package’s default settings). ### Patches In progress ### Workarounds Manually set the `authOptions.cookieOptions.sameSite` configuration option to `'strict'`, `'lax'` or `true`. ### References _Are there any links users can visit to find out more?_
  • < 2.0.3
GitHub (opens in a new tab)
  • GHSA-6j36-r6pr-59x4Critical
    Vendure affected by external-authentication account takeover: external login linked to a pre-existing account by email without verification
    • < 3.7.0

    # External-authentication account takeover: external login linked to a pre-existing account by email without requiring verification **Package:** @vendure/core (vendure-ecommerce/vendure, latest master) · > [!IMPORTANT] > This vulnerability **only affects deployments that use external / social authentication** (an `AuthenticationStrategy` other than the built-in native email/password strategy) where that strategy can return an email address the external provider has **not verified** the user owns. **You are affected if all of these are true:** - Your store configures one or more external `A

    CVE: CVE-2026-63472

  • GHSA-jgm3-qmp2-c4p7High
    Vendure: Unauthenticated ReDoS via `regex` filter on SQLite backends
    • < 3.6.5

    ### Summary > [!IMPORTANT] > Only instances running on the SQLite driver (better-sqlite3) are affected; SQLite is usually used in development/testing backend, so production deployments on PostgreSQL or MySQL/MariaDB are unaffected. The `StringOperators.regex` filter exposed on the public Shop GraphQL API is evaluated inside the Node.js event loop via a synchronous SQLite user-defined function (UDF). Supplying a catastrophically backtracking pattern blocks the entire event loop, causing a complete denial of service with no authentication required. --- ### Details Vendure registers a JavaS

    CVE: CVE-2026-63460

  • GHSA-xf65-r35x-wmmvModerate
    Vendure: Shop API list queries can return non-public entities when filterOperator is OR
    • >= 1.0.0, < 3.6.5

    The Shop API `products`, `collections` and `facets` queries inject a mandatory filter to restrict results to publicly-visible entities (`Product.enabled = true`, `Collection.isPrivate = false`, `Facet.isPrivate = false`). This injected guard was combined with the caller-supplied filter using the caller-controlled `filterOperator`. When a caller sets `filterOperator: OR`, the guard is OR-combined instead of AND-combined, so a caller can retrieve disabled products and private collections/facets by supplying a predicate that matches them. ### Impact Exposure of catalog entities intended to be hi

    CVE: CVE-2026-63461

  • GHSA-9pp3-53p2-ww9vCritical
    @vendure/core has a SQL Injection vulnerability
    • >= 3.0.0, < 3.5.7
    • >= 3.6.0, < 3.6.2
    • +1 more
    Affected versions:
    • >= 3.0.0, < 3.5.7
    • >= 3.6.0, < 3.6.2
    • >= 1.7.4, < 2.3.4

    ## Summary An unauthenticated SQL injection vulnerability exists in the Vendure Shop API. A user-controlled query string parameter is interpolated directly into a raw SQL expression without parameterization or validation, allowing an attacker to execute arbitrary SQL against the database. This affects all supported database backends (PostgreSQL, MySQL/MariaDB, SQLite). The Admin API is also affected, though exploitation there requires authentication. ## Affected versions - `@vendure/core` < 2.3.4 - `@vendure/core` >= 3.0.0, < 3.5.7 - `@vendure/core` >= 3.6.0, < 3.6.2 Note: versions 2.3.4

    CVE: CVE-2026-40887

  • GHSA-6f65-4fv2-wwchLow
    Vendure vulnerable to timing attack that enables user enumeration in NativeAuthenticationStrategy
    • < 3.5.3

    ### Summary The `NativeAuthenticationStrategy.authenticate()` method is vulnerable to a timing attack that allows attackers to enumerate valid usernames (email addresses). ### Details In `packages/core/src/config/auth/native-authentication-strategy.ts`, the authenticate method returns immediately if a user is not found: ```typescript const user = await this.userService.getUserByEmailAddress(ctx, data.username); if (!user) { return false; // Instant return (~1-5ms) } const passwordMatch = await this.verifyUserPassword(ctx, user.id, data.password); // Password check takes ~200-400ms with b

    CVE: CVE-2026-25050

  • GHSA-wm63-7627-ch33Moderate
    @vendure/core's insecure currencyCode handling allows wrong payment amounts
    • < 2.1.3

    ### Impact Currently, in many Vendure deployments it's possible to select any currencyCode (really any, doesn't need to be assigned to the channel) and pay through Mollie and Stripe in that particular currencyCode. The prices are not transformed. The result is the Order is in Payment Settled in the foreign currency. See SS, CZK is not in the channel. I've tested with Mollie and Stripe it both works. **Further notes** After looking into this further and with help from the comments below, the root cause of this vulnerability is the ability to specify an arbitrary `currencyCode` as a query par

  • GHSA-h9wq-xcqx-mqxmLow
    Vendure Cross Site Request Forgery vulnerability impacting all API requests
    • < 2.0.3

    ### Impact Vendure is an e-commerce GraphQL framework with a number of APIs and different levels of authorization. By default the Cookie settings are insecure, having the SameSite setting as false which results in not having one (originates from the cookie-session npm package’s default settings). ### Patches In progress ### Workarounds Manually set the `authOptions.cookieOptions.sameSite` configuration option to `'strict'`, `'lax'` or `true`. ### References _Are there any links users can visit to find out more?_

Showing 1-7 of 7 vulnerabilities