{"api_version":"1","generated_at":"2026-11-11T01:30:14+00:00","cve":"CVE-2026-120350","urls":{"html":"https://cve.report/CVE-2026-120350","api":"https://cve.report/api/cve/CVE-2026-120350.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-120350","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-120350"},"summary":{"title":"Stored Cross-Site Scripting in the Vaadin Rich Text Editor via an Unescaped Video Embed","description":"The Vaadin Rich Text Editor exports a video embed without escaping its value, and then parses the resulting HTML into live DOM. A value crafted to break out of the href attribute therefore runs script in the viewer's browser. An attacker who can edit shared content pastes a video embed carrying the payload, the delta is stored, and the script runs when any user opens the page, including in read only mode.\n\nOnly content persisted through asDelta() is affected. The default HTML value, set and read through setValue and getValue, is sanitized on the server with a safelist that has no iframe, so the embed does not survive that path. Vaadin 24 and older are not affected: they build the HTML value from the editor's own innerHTML, which the browser escapes.\n\nUsers of affected versions should apply the following mitigation or upgrade. Releases that have fixed this issue include:\n\nProduct version\nVaadin 25.0.0 - 25.0.13\nVaadin 25.1.0 - 25.1.13\nVaadin 25.2.0 - 25.2.12\nVaadin 25.3.0 - 25.3.4\n\nMitigation\nNo fixed release on this line, upgrade to 25.2.13 or newer\nNo fixed release on this line, upgrade to 25.2.13 or newer\nUpgrade to 25.2.13\nUpgrade to 25.3.5","state":"PUBLISHED","assigner":"Vaadin","published_at":"2026-11-10 12:17:17","updated_at":"2026-11-10 12:17:17"},"problem_types":["CWE-79","CWE-79 CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')"],"metrics":[{"version":"4.0","source":"security@vaadin.com","type":"Secondary","score":"5.1","severity":"MEDIUM","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/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","data":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/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","baseScore":5.1,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"LOW","userInteraction":"PASSIVE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"LOW","subIntegrityImpact":"LOW","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}},{"version":"4.0","source":"CNA","type":"CVSS","score":"5.1","severity":"MEDIUM","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","data":{"Automatable":"NO","Recovery":"AUTOMATIC","Safety":"NEGLIGIBLE","attackComplexity":"LOW","attackRequirements":"NONE","attackVector":"NETWORK","baseScore":5.1,"baseSeverity":"MEDIUM","privilegesRequired":"LOW","providerUrgency":"CLEAR","subAvailabilityImpact":"NONE","subConfidentialityImpact":"LOW","subIntegrityImpact":"LOW","userInteraction":"PASSIVE","valueDensity":"DIFFUSE","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnerabilityResponseEffort":"LOW"}}],"references":[{"url":"https://github.com/vaadin/web-components/pull/13272","name":"https://github.com/vaadin/web-components/pull/13272","refsource":"security@vaadin.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/advisories/GHSA-v3m3-f69x-jf25","name":"https://github.com/advisories/GHSA-v3m3-f69x-jf25","refsource":"security@vaadin.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://vaadin.com/security/cve-2026-120350","name":"https://vaadin.com/security/cve-2026-120350","refsource":"security@vaadin.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-120350","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-120350","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"vaadin","product":"vaadin","version":"affected 25.0.0 25.0.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin","version":"affected 25.1.0 25.1.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin","version":"affected 25.2.0 25.2.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin","version":"affected 25.3.0 25.3.5 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin-core","version":"affected 25.0.0 25.0.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin-core","version":"affected 25.1.0 25.1.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin-core","version":"affected 25.2.0 25.2.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin-core","version":"affected 25.3.0 25.3.5 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin-rich-text-editor-flow","version":"affected 25.0.0 25.0.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin-rich-text-editor-flow","version":"affected 25.1.0 25.1.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin-rich-text-editor-flow","version":"affected 25.2.0 25.2.13 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"vaadin-rich-text-editor-flow","version":"affected 25.3.0 25.3.5 maven","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"rich-text-editor","version":"affected 25.0.0 25.0.13 semver","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"rich-text-editor","version":"affected 25.1.0 25.1.14 semver","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"rich-text-editor","version":"affected 25.2.0 25.2.17 semver","platforms":[]},{"source":"CNA","vendor":"vaadin","product":"rich-text-editor","version":"affected 25.3.0 25.3.5 semver","platforms":[]}],"timeline":[],"solutions":[{"source":"CNA","title":"","value":"Users of affected versions should apply the following mitigation or upgrade.","time":"","lang":"en"}],"workarounds":[{"source":"CNA","title":"","value":"Persist the editor content through the default HTML value, set and read with setValue and getValue, which is sanitized on the server, rather than through asDelta(). An application that must use asDelta() should strip video inserts from the delta before storing or replaying it.","time":"","lang":"en"}],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"collectionURL":"https://repo.maven.apache.org/maven2","defaultStatus":"unaffected","packageName":"com.vaadin:vaadin","product":"vaadin","repo":"https://github.com/vaadin/platform","vendor":"vaadin","versions":[{"lessThanOrEqual":"25.0.13","status":"affected","version":"25.0.0","versionType":"maven"},{"lessThanOrEqual":"25.1.13","status":"affected","version":"25.1.0","versionType":"maven"},{"lessThan":"25.2.13","status":"affected","version":"25.2.0","versionType":"maven"},{"lessThan":"25.3.5","status":"affected","version":"25.3.0","versionType":"maven"}]},{"collectionURL":"https://repo.maven.apache.org/maven2","defaultStatus":"unaffected","packageName":"com.vaadin:vaadin-core","product":"vaadin-core","repo":"https://github.com/vaadin/platform","vendor":"vaadin","versions":[{"lessThanOrEqual":"25.0.13","status":"affected","version":"25.0.0","versionType":"maven"},{"lessThanOrEqual":"25.1.13","status":"affected","version":"25.1.0","versionType":"maven"},{"lessThan":"25.2.13","status":"affected","version":"25.2.0","versionType":"maven"},{"lessThan":"25.3.5","status":"affected","version":"25.3.0","versionType":"maven"}]},{"collectionURL":"https://repo.maven.apache.org/maven2","defaultStatus":"unaffected","packageName":"com.vaadin:vaadin-rich-text-editor-flow","product":"vaadin-rich-text-editor-flow","repo":"https://github.com/vaadin/flow-components","vendor":"vaadin","versions":[{"lessThanOrEqual":"25.0.13","status":"affected","version":"25.0.0","versionType":"maven"},{"lessThanOrEqual":"25.1.13","status":"affected","version":"25.1.0","versionType":"maven"},{"lessThan":"25.2.13","status":"affected","version":"25.2.0","versionType":"maven"},{"lessThan":"25.3.5","status":"affected","version":"25.3.0","versionType":"maven"}]},{"collectionURL":"https://registry.npmjs.org","defaultStatus":"unaffected","packageName":"@vaadin/rich-text-editor","product":"rich-text-editor","repo":"https://github.com/vaadin/web-components","vendor":"vaadin","versions":[{"lessThanOrEqual":"25.0.13","status":"affected","version":"25.0.0","versionType":"semver"},{"lessThanOrEqual":"25.1.14","status":"affected","version":"25.1.0","versionType":"semver"},{"lessThan":"25.2.17","status":"affected","version":"25.2.0","versionType":"semver"},{"lessThan":"25.3.5","status":"affected","version":"25.3.0","versionType":"semver"}]}],"descriptions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<span style=\"background-color: rgba(232, 232, 232, 0.04);\">The Vaadin Rich Text Editor exports a video embed without escaping its value and then parses the resulting HTML into live DOM, so a crafted embed runs script in the viewer's browser. An attacker who can edit shared content stores the payload, and it fires when any user opens the page, including in read only mode.<br><br>Only content persisted through <span style=\"font-family: 'Andale Mono', AndaleMono, 'Lucida Console', monospace;\">asDelta()</span> is affected: the default HTML value is sanitized on the server with a safelist that has no iframe. Vaadin 24 and older are not affected, they build the HTML value from the editor's own <span style=\"font-family: 'Andale Mono', AndaleMono, 'Lucida Console', monospace;\">innerHTML</span>, which the browser escapes.</span>"}],"value":"The Vaadin Rich Text Editor exports a video embed without escaping its value, and then parses the resulting HTML into live DOM. A value crafted to break out of the href attribute therefore runs script in the viewer's browser. An attacker who can edit shared content pastes a video embed carrying the payload, the delta is stored, and the script runs when any user opens the page, including in read only mode.\n\nOnly content persisted through asDelta() is affected. The default HTML value, set and read through setValue and getValue, is sanitized on the server with a safelist that has no iframe, so the embed does not survive that path. Vaadin 24 and older are not affected: they build the HTML value from the editor's own innerHTML, which the browser escapes.\n\nUsers of affected versions should apply the following mitigation or upgrade. Releases that have fixed this issue include:\n\nProduct version\nVaadin 25.0.0 - 25.0.13\nVaadin 25.1.0 - 25.1.13\nVaadin 25.2.0 - 25.2.12\nVaadin 25.3.0 - 25.3.4\n\nMitigation\nNo fixed release on this line, upgrade to 25.2.13 or newer\nNo fixed release on this line, upgrade to 25.2.13 or newer\nUpgrade to 25.2.13\nUpgrade to 25.3.5"}],"impacts":[{"capecId":"CAPEC-592","descriptions":[{"lang":"en","value":"CAPEC-592 Stored XSS"}]}],"metrics":[{"cvssV4_0":{"Automatable":"NO","Recovery":"AUTOMATIC","Safety":"NEGLIGIBLE","attackComplexity":"LOW","attackRequirements":"NONE","attackVector":"NETWORK","baseScore":5.1,"baseSeverity":"MEDIUM","privilegesRequired":"LOW","providerUrgency":"CLEAR","subAvailabilityImpact":"NONE","subConfidentialityImpact":"LOW","subIntegrityImpact":"LOW","userInteraction":"PASSIVE","valueDensity":"DIFFUSE","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnerabilityResponseEffort":"LOW"},"format":"CVSS","scenarios":[{"lang":"en","value":"GENERAL"}]}],"problemTypes":[{"descriptions":[{"cweId":"CWE-79","description":"CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-11-10T11:50:08.635Z","orgId":"9e0f3122-90e9-42d5-93de-8c6b98deef7e","shortName":"Vaadin"},"references":[{"url":"https://vaadin.com/security/cve-2026-120350"},{"url":"https://github.com/vaadin/web-components/pull/13272"},{"url":"https://github.com/advisories/GHSA-v3m3-f69x-jf25"}],"solutions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<b><span style=\"background-color: transparent;\">Users of affected versions should apply the following mitigation or upgrade.</span></b><br>"}],"value":"Users of affected versions should apply the following mitigation or upgrade."}],"source":{"discovery":"INTERNAL"},"title":"Stored Cross-Site Scripting in the Vaadin Rich Text Editor via an Unescaped Video Embed","workarounds":[{"lang":"en","value":"Persist the editor content through the default HTML value, set and read with setValue and getValue, which is sanitized on the server, rather than through asDelta(). An application that must use asDelta() should strip video inserts from the delta before storing or replaying it."}],"x_generator":{"engine":"Vulnogram 0.5.0"}}},"cveMetadata":{"assignerOrgId":"9e0f3122-90e9-42d5-93de-8c6b98deef7e","assignerShortName":"Vaadin","cveId":"CVE-2026-120350","datePublished":"2026-11-10T11:50:08.635Z","dateReserved":"2026-11-01T19:47:45.740Z","dateUpdated":"2026-11-10T11:50:08.635Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-11-10 12:17:17","lastModifiedDate":"2026-11-10 12:17:17","problem_types":["CWE-79","CWE-79 CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')"],"metrics":{"cvssMetricV40":[{"source":"security@vaadin.com","type":"Secondary","cvssData":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/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","baseScore":5.1,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"LOW","userInteraction":"PASSIVE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"LOW","subIntegrityImpact":"LOW","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"120350","Ordinal":"1","Title":"Stored Cross-Site Scripting in the Vaadin Rich Text Editor via a","CVE":"CVE-2026-120350","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"120350","Ordinal":"1","NoteData":"The Vaadin Rich Text Editor exports a video embed without escaping its value, and then parses the resulting HTML into live DOM. A value crafted to break out of the href attribute therefore runs script in the viewer's browser. An attacker who can edit shared content pastes a video embed carrying the payload, the delta is stored, and the script runs when any user opens the page, including in read only mode.\n\nOnly content persisted through asDelta() is affected. The default HTML value, set and read through setValue and getValue, is sanitized on the server with a safelist that has no iframe, so the embed does not survive that path. Vaadin 24 and older are not affected: they build the HTML value from the editor's own innerHTML, which the browser escapes.\n\nUsers of affected versions should apply the following mitigation or upgrade. Releases that have fixed this issue include:\n\nProduct version\nVaadin 25.0.0 - 25.0.13\nVaadin 25.1.0 - 25.1.13\nVaadin 25.2.0 - 25.2.12\nVaadin 25.3.0 - 25.3.4\n\nMitigation\nNo fixed release on this line, upgrade to 25.2.13 or newer\nNo fixed release on this line, upgrade to 25.2.13 or newer\nUpgrade to 25.2.13\nUpgrade to 25.3.5","Type":"Description","Title":"Stored Cross-Site Scripting in the Vaadin Rich Text Editor via a"}]}}}