{"id":"CVE-2026-107588","kind":"vulnerability","aliases":["CVE-2026-107588"],"related":[],"title":"Vaadin Charts: bundled Highcharts flaws allow XSS and prototype pollution","description":"Vaadin Charts renders charts with the Highcharts library and pins an exact version of it, 9.2.2 in Vaadin 22 to 24 and 12.2.0 in Vaadin 25, so an application cannot remove these vulnerabilities by upgrading Highcharts on its own. Highsoft disclosed several vulnerabilities in that library that are reachable through the chart configuration: writes to Object.prototype through dotted series.keys paths, and cross-site scripting through credits.href, through breadcrumbs.style, through HTML text parsing while printing, and through xlink:href attributes in exported charts. An application is affected where data an attacker controls reaches the chart configuration, for example through additionalOptions, through updateConfiguration(), or through text options that accept markup. The fixed Vaadin versions apply Highsoft's recommended workarounds to the bundled Highcharts when it loads, and keep the same Highcharts version.\n\n\nUsers of affected versions should apply the following mitigation or upgrade. Releases that have fixed this issue include:\n\nProduct version\nVaadin 22.0.0 - 23.6.15\nVaadin 24.0.0 - 24.4.23\nVaadin 24.5.0 - 24.7.15\nVaadin 24.8.0 - 24.9.22\nVaadin 24.10.0 - 24.10.10\nVaadin 25.0.0 - 25.2.9\nVaadin 25.3.0\n\nMitigation\nUpgrade to 23.6.16\nUpgrade to 24.4.24\nUpgrade to 24.7.16\nUpgrade to 24.9.23\nUpgrade to 24.10.11\nUpgrade to 25.2.10\nUpgrade to 25.3.1 or newer\n\nPlease note that Vaadin versions 10-13 and 15-22 are no longer supported and you should update either to the latest 23, 24, 25 version.\n\nArtifacts\nMaven coordinates / Vulnerable versions / Fixed version\ncom.vaadin:vaadin / 22.0.0 - 23.6.15 / >=23.6.16\ncom.vaadin:vaadin / 24.0.0 - 24.4.23 / >=24.4.24\ncom.vaadin:vaadin / 24.5.0 - 24.7.15 / >=24.7.16\ncom.vaadin:vaadin / 24.8.0 - 24.9.22 / >=24.9.23\ncom.vaadin:vaadin / 24.10.0 - 24.10.10 / >=24.10.11\ncom.vaadin:vaadin / 25.0.0 - 25.0.13 / >=25.2.10\ncom.vaadin:vaadin / 25.1.0 - 25.1.13 / >=25.2.10\ncom.vaadin:vaadin / 25.2.0 - 25.2.9 / >=25.2.10\ncom.vaadin:vaadin / 25.3.0 / >=25.3.1\ncom.vaadin:vaadin-charts-flow / 22.0.0 - 23.6.15 / >=23.6.16\ncom.vaadin:vaadin-charts-flow / 24.0.0 - 24.4.22 / >=24.4.24\ncom.vaadin:vaadin-charts-flow / 24.5.0 - 24.7.14 / >=24.7.15\ncom.vaadin:vaadin-charts-flow / 24.8.0 - 24.9.22 / >=24.9.23\ncom.vaadin:vaadin-charts-flow / 24.10.0 - 24.10.10 / >=24.10.11\ncom.vaadin:vaadin-charts-flow / 25.0.0 - 25.0.13 / >=25.2.10\ncom.vaadin:vaadin-charts-flow / 25.1.0 - 25.1.13 / >=25.2.10\ncom.vaadin:vaadin-charts-flow / 25.2.0 - 25.2.9 / >=25.2.10\ncom.vaadin:vaadin-charts-flow / 25.3.0 / >=25.3.1\ncom.vaadin:vaadin-charts-flow-svg-generator / 21.0.0 - 23.6.15 / >=23.6.16\ncom.vaadin:vaadin-charts-flow-svg-generator / 24.0.0 - 24.4.22 / >=24.4.24\ncom.vaadin:vaadin-charts-flow-svg-generator / 24.5.0 - 24.7.14 / >=24.7.15\ncom.vaadin:vaadin-charts-flow-svg-generator / 24.8.0 - 24.9.22 / >=24.9.23\ncom.vaadin:vaadin-charts-flow-svg-generator / 24.10.0 - 24.10.10 / >=24.10.11\ncom.vaadin:vaadin-charts-flow-svg-generator / 25.0.0 - 25.0.13 / >=25.2.10\ncom.vaadin:vaadin-charts-flow-svg-generator / 25.1.0 - 25.1.13 / >=25.2.10\ncom.vaadin:vaadin-charts-flow-svg-generator / 25.2.0 - 25.2.9 / >=25.2.10\ncom.vaadin:vaadin-charts-flow-svg-generator / 25.3.0 / >=25.3.1\n\nnpm packages\nnpm package / Vulnerable versions / Fixed version\n@vaadin/charts / 22.0.0 - 23.6.6 / >=23.6.7\n@vaadin/charts / 24.0.0 - 24.4.18 / >=24.4.19\n@vaadin/charts / 24.5.0 - 24.7.12 / >=24.7.13\n@vaadin/charts / 24.8.0 - 24.9.18 / >=24.9.19\n@vaadin/charts / 24.10.0 - 24.10.6 / >=24.10.7\n@vaadin/charts / 25.0.0 - 25.0.13 / >=25.2.14\n@vaadin/charts / 25.1.0 - 25.1.14 / >=25.2.14\n@vaadin/charts / 25.2.0 - 25.2.13 / >=25.2.14\n@vaadin/charts / 25.3.0 / >=25.3.1","summary":"Vaadin Charts ships a pinned Highcharts version that contains several flaws reachable through the chart configuration, including writes to Object.prototype and cross-site scripting via credits.href, breadcrumbs.style, HTML text parsing and xlink:href in exported charts. An attacker who controls data that reaches the chart configuration can run script in the victim's browser or pollute object prototypes.","severity":"high","cvss":8.4,"epss":0.00524,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["flow","highcharts","java","npm","package","vaadin"],"not_affected_if":["no-user-controlled-chart-data","static-chart-config"],"how_to_check":"- Check the `com.vaadin:vaadin`, `com.vaadin:vaadin-charts-flow` and `com.vaadin:vaadin-charts-flow-svg-generator` versions in the Maven dependency tree (`mvn dependency:tree`).\n- Check the `@vaadin/charts` version in `package.json` or the lockfile.\n- Look for attacker-influenced data reaching `additionalOptions`, `updateConfiguration()` or text options that accept markup.","fix":"- Upgrade `com.vaadin:vaadin` and the charts artifacts to `23.6.16`, `24.4.24`, `24.7.16`, `24.9.23`, `24.10.11`, `25.2.10`, or `25.3.1` or newer for your release line.\n- Upgrade `@vaadin/charts` to `23.6.7`, `24.4.19`, `24.7.13`, `24.9.19`, `24.10.7`, `25.2.14`, or `25.3.1` or newer.\n- Vaadin 10-13 and 15-22 are unsupported; move to the latest 23, 24 or 25 release.","status":"open","published_at":"2026-10-21T19:16:57+00:00","first_seen_at":"2026-10-23T21:57:29+00:00","triaged_at":"2026-10-25T03:01:43+00:00","updated_at":"2026-10-25T03:01:43+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-25T03:01:43Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `com.vaadin:vaadin` and the charts artifacts to `23.6.16`, `24.4.24`, `24.7.16`, `24.9.23`, `24.10.11`, `25.2.10`, or `25.3.1` or newer for your release line.\n- Upgrade `@vaadin/charts` to `23.6.7`, `24.4.19`, `24.7.13`, `24.9.19`, `24.10.7`, `25.2.14`, or `25.3.1` or newer.\n- Vaadin 10-13 and 15-22 are unsupported; move to the latest 23, 24 or 25 release.","reach":"internet","title":"Vaadin Charts: bundled Highcharts flaws allow XSS and prototype pollution","impact":"medium","summary":"Vaadin Charts ships a pinned Highcharts version that contains several flaws reachable through the chart configuration, including writes to Object.prototype and cross-site scripting via credits.href, breadcrumbs.style, HTML text parsing and xlink:href in exported charts. An attacker who controls data that reaches the chart configuration can run script in the victim's browser or pollute object prototypes.","category":"package","nicknames":[],"who_cares":["vaadin","java","flow","npm","highcharts"],"confidence":0.8,"needs_auth":"unknown","worst_case":"Attacker script runs in victim browsers; prototype pollution in chart code.","analyst_note":"","how_to_check":"- Check the `com.vaadin:vaadin`, `com.vaadin:vaadin-charts-flow` and `com.vaadin:vaadin-charts-flow-svg-generator` versions in the Maven dependency tree (`mvn dependency:tree`).\n- Check the `@vaadin/charts` version in `package.json` or the lockfile.\n- Look for attacker-influenced data reaching `additionalOptions`, `updateConfiguration()` or text options that accept markup.","needs_analyst":false,"not_affected_if":["static-chart-config","no-user-controlled-chart-data"],"who_is_affected":"Applications that use Vaadin Charts on the affected versions are exposed when data an attacker can influence reaches the chart configuration, such as through additionalOptions, updateConfiguration() or markup-accepting text options. Upgrading Highcharts alone does not fix it because Vaadin pins the version, so the Vaadin upgrade is required. Applications that only render static, trusted chart configurations can deprioritise it.","user_interaction":"unknown","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000984,"input_tokens":5352,"output_tokens":897,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-107588':13A,16A '-13':283C '-2026':12A,15A '-22':286C '10':282C '12.2.0':104C '15':285C '21.0.0':432C '22':100C '22.0.0':234C,312C,359C,523C '23':299C '23.6.15':235C,313C,360C,433C '23.6.16':256C,314C,361C,434C '23.6.6':524C '23.6.7':525C '24':102C,300C '24.0.0':237C,317C,367C,442C,527C '24.10.0':246C,332C,391C,472C,539C '24.10.10':247C,333C,392C,473C '24.10.11':268C,334C,393C,474C '24.10.6':540C '24.10.7':541C '24.4.18':528C '24.4.19':529C '24.4.22':368C,443C '24.4.23':238C,318C '24.4.24':259C,319C,369C,444C '24.5.0':240C,322C,375C,452C,531C '24.7.12':532C '24.7.13':533C '24.7.14':376C,453C '24.7.15':241C,323C,377C,454C '24.7.16':262C,324C '24.8.0':243C,327C,383C,462C,535C '24.9.18':536C '24.9.19':537C '24.9.22':244C,328C,384C,463C '24.9.23':265C,329C,385C,464C '25':107C,301C '25.0.0':249C,337C,399C,482C,543C '25.0.13':338C,400C,483C,544C '25.1.0':342C,407C,492C,547C '25.1.13':343C,408C,493C '25.1.14':548C '25.2.0':347C,415C,502C,551C '25.2.10':271C,339C,344C,349C,401C,409C,417C,484C,494C,504C '25.2.13':552C '25.2.14':545C,549C,553C '25.2.9':250C,348C,416C,503C '25.3.0':252C,352C,423C,512C,555C '25.3.1':274C,353C,424C,513C,556C '9.2.2':97C 'accept':189C 'additionalopt':181C 'affect':168C,215C 'allow':6A 'appli':195C,218C 'applic':110C,166C 'artifact':303C 'attack':61B,172C 'attribut':161C 'breadcrumbs.style':50B,150C 'browser':77B 'bundl':3A,202C 'cannot':111C 'chart':2A,24B,37B,59B,68B,83C,85C,133C,164C,176C,357C,365C,373C,381C,389C,397C,405C,413C,421C,428C,438C,448C,458C,468C,478C,488C,498C,508C 'com.vaadin':310C,315C,320C,325C,330C,335C,340C,345C,350C,354C,362C,370C,378C,386C,394C,402C,410C,418C,425C,435C,445C,455C,465C,475C,485C,495C,505C 'configur':38B,69B,134C,177C 'contain':31B 'control':63B,173C 'coordin':305C 'credits.href':49B,148C 'cross':45B,144C 'cross-sit':44B,143C 'cve':11A,14A 'data':64B,170C 'disclos':122C 'dot':139C 'either':295C 'exact':93C 'exampl':179C 'export':58B,163C 'fix':192C,227C,308C,520C 'flaw':5A,33B 'flow':17B,358C,366C,374C,382C,390C,398C,406C,414C,422C,429C,439C,449C,459C,469C,479C,489C,499C,509C 'follow':220C 'generat':431C,441C,451C,461C,471C,481C,491C,501C,511C 'highchart':4A,18B,28B,88C,117C,203C,211C 'highsoft':121C,196C 'href':56B,160C 'html':51B,152C 'includ':39B,230C 'issu':229C 'java':19B 'keep':208C 'latest':298C 'librari':89C,127C 'load':206C 'longer':289C 'markup':190C 'maven':304C 'mitig':221C,253C 'newer':276C 'note':278C 'npm':20B,514C,516C 'object':80B 'object.prototype':42B,137C 'option':187C 'packag':21B,515C,517C 'pars':53B,154C 'path':141C 'pin':27B,91C 'pleas':277C 'pollut':10A,79B 'print':156C 'product':231C 'prototyp':9A,81B 'reach':66B,174C 'reachabl':34B,130C 'recommend':198C 'releas':224C 'remov':112C 'render':84C 'run':71B 'script':47B,72B,146C 'series.keys':140C 'sever':32B,123C 'ship':25B 'site':46B,145C 'support':290C 'svg':430C,440C,450C,460C,470C,480C,490C,500C,510C 'text':52B,153C,186C 'updat':294C 'updateconfigur':183C 'upgrad':116C,223C,254C,257C,260C,263C,266C,269C,272C 'user':213C 'vaadin':1A,22B,23B,82C,99C,106C,193C,233C,236C,239C,242C,245C,248C,251C,280C,311C,316C,321C,326C,331C,336C,341C,346C,351C,356C,364C,372C,380C,388C,396C,404C,412C,420C,427C,437C,447C,457C,467C,477C,487C,497C,507C 'vaadin-charts-flow':355C,363C,371C,379C,387C,395C,403C,411C,419C 'vaadin-charts-flow-svg-gener':426C,436C,446C,456C,466C,476C,486C,496C,506C 'vaadin/charts':522C,526C,530C,534C,538C,542C,546C,550C,554C 'version':29B,94C,194C,212C,216C,232C,281C,302C,307C,309C,519C,521C 'via':48B 'victim':75B 'vulner':114C,124C,306C,518C 'workaround':199C 'write':40B,135C 'xlink':55B,159C 'xss':7A","nicknames":[],"mitigations":[],"who_affected":"Applications that use Vaadin Charts on the affected versions are exposed when data an attacker can influence reaches the chart configuration, such as through additionalOptions, updateConfiguration() or markup-accepting text options. Upgrading Highcharts alone does not fix it because Vaadin pins the version, so the Vaadin upgrade is required. Applications that only render static, trusted chart configurations can deprioritise it.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-21T19:16:57+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:H/VI:H/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","cvss_by":"security@vaadin.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-107588","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-107588","severity":null,"published_at":"2026-10-21T19:16:57+00:00","modified_at":"2026-10-22T15:37:23+00:00","first_seen_at":"2026-10-23T21:57:29+00:00","fetched_at":"2026-10-23T22:29:02+00:00","note":null},{"source":"epss","external_id":"CVE-2026-107588","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-107588","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T13:15:54+00:00","fetched_at":"2026-10-24T13:15:54+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}