Vendure: Stored XSS in the Admin Dashboard via unsafe HTML-stripping (innerHTML) of entity descriptions
Vendure is an open-source headless commerce platform. Prior to 3.6.5, RichTextDescriptionCell in packages/dashboard/src/lib/components/shared/table-cell/order-table-cell-components.tsx attempts to strip markup by assigning an administrator-controlled description to a live element's innerHTML and then reading textContent. Active resource markup can execute an event handler during the innerHTML assignment before textContent is read. A lower-privilege administrator can store such markup in descriptions rendered by the Products list, Collections list, Promotions list, Payment Methods list, or Shipping Methods list, and script executes when another administrator views the affected row. This stored cross-site scripting can compromise the viewing administrator's session and enable cross-privilege or cross-channel administrative actions. This issue is fixed in version 3.6.5.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-63459
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 2 Nov 2026, 18:46 UTC · Revision 1
Source evidence
Vendure: Stored XSS in the Admin Dashboard via unsafe HTML-stripping (innerHTML) of entity descriptions
core-osv · Original sourcePublished 17 Sept 2026, 14:45 UTC
Vendure is an open-source headless commerce platform. Prior to 3.6.5, RichTextDescriptionCell in packages/dashboard/src/lib/components/shared/table-cell/order-table-cell-components.tsx attempts to strip markup by assigning an administrator-controlled description to a live element's innerHTML and then reading textContent. Active resource markup can execute an event handler during the innerHTML assignment before textContent is read. A lower-privilege administrator can store such markup in descriptions rendered by the Products list, Collections list, Promotions list, Payment Methods list, or Shipping Methods list, and script executes when another administrator views the affected row. This stored cross-site scripting can compromise the viewing administrator's session and enable cross-privilege or cross-channel administrative actions. This issue is fixed in version 3.6.5.
osv:CVE-2026-63459
Complete source record
{
"id": "3751cb1bc60e1482c06ba78cb030cb2247dd99553c8f240b94e8d407ae385650",
"url": "https://osv.dev/vulnerability/CVE-2026-63459",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Vendure: Stored XSS in the Admin Dashboard via unsafe HTML-stripping (innerHTML) of entity descriptions",
"summary": "Vendure is an open-source headless commerce platform. Prior to 3.6.5, RichTextDescriptionCell in packages/dashboard/src/lib/components/shared/table-cell/order-table-cell-components.tsx attempts to strip markup by assigning an administrator-controlled description to a live element's innerHTML and then reading textContent. Active resource markup can execute an event handler during the innerHTML assignment before textContent is read. A lower-privilege administrator can store such markup in descriptions rendered by the Products list, Collections list, Promotions list, Payment Methods list, or Shipping Methods list, and script executes when another administrator views the affected row. This stored cross-site scripting can compromise the viewing administrator's session and enable cross-privilege or cross-channel administrative actions. This issue is fixed in version 3.6.5.",
"evidence": "osv:CVE-2026-63459",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-63459",
"aliases": [
"CVE-2026-63459",
"GHSA-xhq9-whgq-49j5"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/vendurehq/vendure",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "ceb0705be869c1b84f6796c8e7bdc56faa33c064"
},
{
"fixed": "d7aa42a3f0cb524297a1a2fdf700e4aba9aca684"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"fixed": "3.6.5"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "d7aa42a3f0cb524297a1a2fdf700e4aba9aca684"
}
],
"source": "REFERENCES_COMMIT"
},
{
"range": [
{
"fixed": "ceb0705be869c1b84f6796c8e7bdc56faa33c064"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v3.6.5"
}
]
}
}
],
"versions": [
"v3.6.4",
"v3.6.3",
"v3.6.2",
"v3.6.1",
"v3.5.0",
"v3.4.2",
"v3.4.1",
"v3.4.0",
"v3.3.8",
"v3.3.7",
"v3.3.6",
"v3.3.5",
"v3.3.4",
"v3.3.3",
"v3.3.2",
"v3.3.1",
"v3.3.0",
"v3.2.2",
"v3.2.1",
"v3.2.0",
"v3.0.5",
"v3.0.4",
"v3.0.3",
"v3.0.2",
"v2.3.0",
"v3.0.1",
"v3.0.0",
"v3.0.0-next.0",
"v2.2.7",
"v2.2.6",
"v2.2.5",
"v2.2.4",
"v2.2.3",
"v2.2.2",
"v2.2.1",
"v2.2.0",
"v2.2.0-next.8",
"v2.2.0-next.7",
"v2.2.0-next.6",
"v2.2.0-next.5",
"v2.2.0-next.4",
"v2.2.0-next.3",
"v2.2.0-next.2",
"v2.2.0-next.1",
"v2.2.0-next.0",
"v2.1.0",
"v2.1.0-next.7",
"v2.1.0-next.6",
"v2.1.0-next.5",
"v2.0.5",
"v2.0.4",
"v2.0.3",
"v2.0.2",
"v2.0.1",
"v2.0.0",
"v2.0.0-beta.3",
"v2.0.0-beta.2",
"v2.0.0-beta.1",
"v2.0.0-beta.0",
"v2.0.0-next.28",
"v2.0.0-next.27",
"v2.0.0-next.26",
"v2.0.0-next.25",
"v2.0.0-next.24",
"v2.0.0-next.23",
"v2.0.0-next.22",
"v2.0.0-next.21",
"v2.0.0-next.20",
"v2.0.0-next.19",
"v2.0.0-next.18",
"v2.0.0-next.17",
"v2.0.0-next.16",
"v2.0.0-next.15",
"v2.0.0-next.14",
"v2.0.0-next.13",
"v2.0.0-next.12",
"v2.0.0-next.11",
"v2.0.0-next.10",
"v2.0.0-next.9",
"v2.0.0-next.8",
"v2.0.0-next.7",
"v2.0.0-next.6",
"v2.0.0-next.5",
"v2.0.0-next.4",
"v2.0.0-next.3",
"v2.0.0-next.2",
"v2.0.0-next.1",
"v2.0.0-next.0",
"v1.4.0",
"v1.4.0-beta.0",
"v1.3.2",
"v1.3.1",
"v1.3.0",
"v1.2.3",
"v1.2.2",
"v1.2.1",
"v1.2.0",
"v1.1.0",
"v1.0.0",
"v1.0.0-rc.0",
"v1.0.0-beta.11",
"v1.0.0-beta.10",
"v1.0.0-beta.8",
"v1.0.0-beta.9",
"v1.0.0-beta.7",
"v1.0.0-beta.6",
"v1.0.0-beta.5",
"v1.0.0-beta.4",
"v1.0.0-beta.3",
"v1.0.0-beta.2",
"v1.0.0-beta.1",
"v0.16.1",
"v0.16.0",
"v0.15.2",
"v0.15.1",
"v0.15.0",
"v0.13.0",
"v0.12.4",
"v0.12.3",
"v0.12.2",
"v0.12.1",
"v0.11.1",
"v0.11.0",
"v0.10.1",
"v0.10.0",
"v0.9.0",
"v0.8.2",
"v0.8.1",
"v0.8.0",
"v0.7.0",
"v0.6.5",
"v0.6.4",
"v0.6.2",
"v0.6.1",
"v0.6.0",
"v0.5.1",
"v0.5.0",
"v0.4.0",
"v0.3.4",
"v0.3.3",
"v0.3.1",
"v0.3.0",
"v0.2.1",
"v0.2.0",
"v0.1.2-beta.12",
"v0.1.2-beta.11",
"v0.1.2-beta.10",
"v0.1.2-beta.8",
"v0.1.2-beta.7",
"v0.1.2-beta.6",
"v0.1.2-beta.5",
"v0.1.2-beta.4",
"v0.1.2-beta.3",
"v0.1.2-beta.2",
"v0.1.2-beta.1",
"v0.1.2-beta.0",
"0.1.0-alpha.18",
"0.1.0-alpha.16",
"0.1.0-alpha.15",
"0.1.0-alpha.14",
"0.1.0-alpha.13",
"0.1.0-alpha.12",
"0.1.0-alpha.11",
"0.1.0-alpha.10",
"0.1.0-alpha.9",
"0.1.0-alpha.8",
"0.1.0-alpha.7",
"0.1.0-alpha.6",
"0.1.0-alpha.5",
"0.1.0-alpha.4",
"0.1.0-alpha.3"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-63459.json"
}
}
],
"modified": "2026-10-28T02:30:22.455921507Z",
"provider": "osv",
"references": [
"https://github.com/vendurehq/vendure/releases/tag/v3.6.5",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/63xxx/CVE-2026-63459.json",
"https://github.com/vendurehq/vendure/security/advisories/GHSA-xhq9-whgq-49j5",
"https://nvd.nist.gov/vuln/detail/CVE-2026-63459",
"https://github.com/vendurehq/vendure/commit/d7aa42a3f0cb524297a1a2fdf700e4aba9aca684"
],
"provider_metadata": {
"cwe_ids": [
"CWE-79"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/63xxx/CVE-2026-63459.json"
}
},
"related_cves": [
{
"value": "CVE-2026-63459",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 488701,
"published_at": "2026-09-17T14:45:39.65+00:00"
}