Not a U.S. government website. NDD is an independent vulnerability database by Volerion and is not affiliated with or endorsed by NIST or NVD.
VOLERION
Volerion Security Research

NOT DEFERRED DATABASE

VULNERABILITIES

CVE-2026-40887 Details

ANALYZED


This CVE record has been analyzed and enriched by NVDAPI.com as an independent party.

Description

Vendure is an open-source headless commerce platform. Starting in version 1.7.4 and prior to versions 2.3.4, 3.5.7, and 3.6.2, 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. Versions 2.3.4, 3.5.7, and 3.6.2 contain a patch. For those who are unable to upgrade immediately, Vendure has made a hotfix available that uses `RequestContextService.getLanguageCode` to validate the `languageCode` input at the boundary. This blocks injection payloads before they can reach any query. The hotfix replaces the existing `getLanguageCode` method in `packages/core/src/service/helpers/request-context/request-context.service.ts`. Invalid values are silently dropped and the channel's default language is used instead. The patched versions additionally convert the vulnerable SQL interpolation to a parameterized query as defense in depth.

Metrics

References to Advisories, Solutions, and Tools

By selecting these links, you will be leaving this site. These are references gathered from the official CVE record and are not endorsed by Volerion.

Weakness Enumeration

CWE-IDCWE NameSource
CWE-89Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')[email protected]

Affected Products

ProductVersions
@vendure/core
>= 1.7.4, < 2.3.4 (semver)
>= 3.0.0, < 3.5.7 (semver)
>= 3.6.0, < 3.6.2 (semver)

CPE

  • cpe:2.3:a:vendure:vendure:*:*:*:*:*:*:*:*

Remediation

  • Upgrade: 3.6.2moderate effort
  • Upgrade: 2.3.4moderate effort
  • Upgrade: 3.5.7moderate effort
  • Hotfix:moderate effort

    Replace the existing `getLanguageCode` method in `packages/core/src/service/helpers/request-context/request-context.service.ts` with the following code: private getLanguageCode(req: Request, channel: Channel): LanguageCode | undefined { const queryLanguageCode = req.query?.languageCode as string | undefined; const isValidFormat = queryLanguageCode && /^[a-zA-Z0-9_-]+$/.test(queryLanguageCode); return ( (isValidFormat ? (queryLanguageCode as LanguageCode) : undefined) ?? channel.defaultLanguageCode ?? this.configService.defaultLanguageCode ); } Invalid values will be silently dropped, and the channel's default language will be used instead.

Change History

3 change records found show changes


QUICK INFO

CVE Dictionary Entry:
CVE-2026-40887
NVD Published Date:
Apr 21, 2026
NVD Last Modified:
Jun 17, 2026
Source:
[email protected]
CVE-2026-40887 Details - Not Deferred