Skip to main content

Vaadin CVE-2026-91860

| EUVDEUVD-2026-89951 MEDIUM
Improperly Controlled Modification of Object Prototype Attributes (Prototype Pollution) (CWE-1321)
2026-09-30 Vaadin GHSA-48v4-h5mw-72ww
6.3
CVSS 4.0 · Vendor: Vaadin
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify app sink merging untrusted data
  2. Delivery
    Craft object with __proto__ payload
  3. Exploit
    Submit to chart config or i18n property
  4. Execution
    deepMerge writes to Object.prototype
  5. Persist
    Injected properties pollute all objects
  6. Impact
    Integrity/availability degradation of front-end

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V3 - Web Frontend Security Prototype pollution prevention
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires the host application to merge an object it does not control into one of two specific sinks: a Vaadin chart configuration (e.g., via updateConfiguration/chart series config) or a Vaadin component's i18n property, both of which invoke the vulnerable deepMerge helper. The attacker must be able to supply a crafted object containing a __proto__ (or equivalent prototype) key that reaches that merge call. LIMITING FACTORS: this is not exploitable against a default configuration that never passes untrusted data into these merge functions (reflected by AT:P), impact is confined to client-side JavaScript integrity/availability (no confidentiality, no direct RCE absent a further gadget chain), and only the listed 23.x/24.x/25.x ranges below the fixed versions are affected while 10-13 and 15-22 are unsupported.

Impact

This is a client-side prototype pollution flaw (CWE-1321) in the deepMerge helpers of Vaadin Charts and Vaadin Component Base. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L, base 6.3) is internally consistent with the description: network-reachable, no privileges, no user interaction, but AT:P captures the key limiting factor - exploitation requires the host application to merge an attacker-controlled object into a chart configuration (updateConfiguration) or a component's i18n property. Impact is partial integrity and availability only (VI:L/VA:L), with no confidentiality impact, which is typical of prototype pollution that corrupts Object.prototype but does not directly disclose data. No EPSS score, KEV listing, or public exploit is provided in the input, so this is not confirmed to be under active exploitation. The source-code evidence (PR #12483 and siblings) confirms the root cause and fix - the old deepMerge copied keys such as __proto__ without filtering, and the new object-utils.js deepMerge/deepMergePartials plus a regression test ('should not copy the __proto__ key') validate the correction. Realistically this is a moderate-priority, defense-in-depth fix rather than an urgent RCE: real risk depends heavily on whether an application actually passes untrusted input into these merge sinks, and the impact is bounded to integrity/availability degradation of the front-end unless a downstream gadget chain escalates it.

Exploit ScenarioDerived

An application feeds untrusted JSON (e.g., user-supplied chart settings or i18n overrides) into a Vaadin chart's updateConfiguration or a component's i18n property. An attacker submits a payload like {"__proto__": {"injected": "yes"}}, which the vulnerable deepMerge writes onto Object.prototype, making the injected property visible to every object in the running application. No public exploit was identified in the provided data, and successful exploitation depends on the application exposing one of these merge sinks to attacker-controlled data.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.6% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 30, 2026

Deep-merge prototype pollution in Vaadin Charts and Vaadin Component Base lets remote, unauthenticated attackers write arbitrary properties onto JavaScript's Object.prototype whenever a Vaadin application merges an object it does not control into a chart configuration (e.g. updateConfiguration or a chart series config) or into a component's i18n property. Once injected, those properties are visible to every object in the running client-side application, degrading UI integrity and availability rather than exposing data or yielding direct code execution. Exploitation is conditional - the host application must actually route crafted input containing a __proto__ (or equivalent prototype) key into one of those two merge sinks - and no public exploit code has been identified at time of analysis, with no confirmed active exploitation (CISA KEV). Affected ranges are Vaadin 23.0.0-23.6.13, 24.0.0-24.9.20, 24.10.0-24.10.9, 25.0.0-25.1.11 and 25.2.0-25.2.6 across the Maven artifacts and the corresponding @vaadin/charts and @vaadin/component-base npm packages.

RemediationAI

Vendor-released patches exist: upgrade com.vaadin:vaadin, vaadin-core (where applicable) and vaadin-charts-flow to 23.6.14, 24.9.21, 24.10.10, 25.1.12, or 25.2.7 and newer, and upgrade the npm packages to @vaadin/charts 23.6.5, 24.9.18, 24.10.5, 25.1.12 or 25.2.9 and newer, and @vaadin/component-base 24.9.18, 24.10.5, 25.1.12 or 25.2.9 and newer, keeping the Flow and web-component versions aligned so a patched frontend is not pulled in with an unpatched backend or vice versa; versions 10-13 and 15-22 must first be moved onto a supported 23/24/25 line. The fixes originate in upstream pull requests 12483, 12492, 12493, 12494, 12496 and 12559 in vaadin/web-components, with details at https://vaadin.com/security/cve-2026-91860. If upgrading is not immediately possible, the decisive compensating control is to stop untrusted data from reaching the two sinks: sanitize or allow-list any object bound to a chart configuration (updateConfiguration, chart series config) or to a component i18n property, stripping __proto__, constructor and prototype keys recursively - for example by re-parsing with a JSON.parse reviver that drops those keys or by copying into Object.create(null) before merge; the trade-off is extra server- and client-side validation code that can silently drop legitimate keys if the allow-list is too narrow, and it does not protect any other code path that merges untrusted input. Server-side validation is preferable to client-side filtering because a client-side check can be bypassed by an attacker who controls the payload directly, and as defense in depth Object.freeze(Object.prototype) can be applied to make prototype writes fail - with the trade-off that it breaks libraries and application code that legitimately extend Object.prototype and may surface as unrelated runtime errors. Note that detection of successful pollution is difficult after the fact, so auditing application code for merges of request-derived objects into chart or i18n configuration is recommended in addition to patching.

Affected VersionsENISA

Vaadin 25.2.0 <25.2.7
@vaadin/component-base 24.10.0 <24.10.5
vaadin-core 25.2.0 <25.2.7
@vaadin/charts 23.0.0 <23.6.5
vaadin-core 25.0.0 <25.1.12
@vaadin/component-base 25.2.0 <25.2.9
Vaadin 24.10.0 <24.10.10
@vaadin/charts 24.0.0 <24.9.18
vaadin-charts-flow 24.0.0 <24.9.21
vaadin-core 24.7.0 <24.9.21
@vaadin/charts 25.2.0 <25.2.9
Vaadin 25.0.0 <25.1.12
vaadin-charts-flow 23.0.0 <23.6.14
vaadin-charts-flow 25.0.0 <25.1.12
Vaadin 23.0.0 <23.6.14
Vaadin 24.0.0 <24.9.21
@vaadin/charts 24.10.0 <24.10.5
@vaadin/component-base 24.7.0 <24.9.18
@vaadin/charts 25.0.0 <25.1.12
@vaadin/component-base 25.0.0 <25.1.12
vaadin-core 24.10.0 <24.10.10
vaadin-charts-flow 25.2.0 <25.2.7
vaadin-charts-flow 24.10.0 <24.10.10

Affected Packages

euvd vaadin fix: 23.6.14, 24.9.21, 24.10.10, 25.1.12, 25.2.7
euvd vaadin_charts fix: 23.6.5, 24.9.18, 24.10.5, 25.1.12, 25.2.9
euvd vaadin_charts_flow fix: 23.6.14, 24.9.21, 24.10.10, 25.1.12, 25.2.7
euvd vaadin_component_base fix: 24.9.18, 24.10.5, 25.1.12, 25.2.9
euvd vaadin_core fix: 24.9.21, 24.10.10, 25.1.12, 25.2.7

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 5 packages in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes, i.e. prototype pollution) in the recursive deepMerge helpers that ship in Vaadin Charts and Vaadin Component Base. The original implementations iterated Object.keys(source) and, for any nested object value, either created an empty object on the target or recursed into it, then copied leaf values with Object.assign; nothing filtered dangerous keys, so a source object such as JSON.parse('{"__proto__": {"injected": "yes"}}') caused the key __proto__ to be treated as a normal property and the injected properties to be written onto Object.prototype, propagating into every object in the page. Two distinct sinks were reachable: the chart configuration merge path (packages/charts/src/helpers.js deepMerge used by vaadin-chart-mixin and vaadin-chart-series-mixin) and the i18n merge in packages/component-base/src/i18n-mixin.js. The upstream fix (PRs 12483, 12492, 12493, 12494, 12496, 12559 in vaadin/web-components) removes the duplicated helpers and centralizes merging in a new packages/component-base/src/object-utils.js module whose deepMerge/deepMergePartials only merge values that qualify as plain objects (inheriting from Object.prototype or from nothing), so Date instances, class instances and array values are assigned rather than traversed, and __proto__ keys are not copied; the charts helper now merely re-exports deepMerge from object-utils.js and is marked deprecated, and the i18n mixin calls deepMergePartials. The vulnerability is client-side JavaScript in nature: it affects the browser-side component library (the CPEs list vaadin, vaadin-core, vaadin-charts-flow and the npm packages @vaadin/charts and @vaadin/component-base), and while the CVSS 4.0 vector CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N yields a vendor base score of 6.3, the independent assessment applies CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:L, reflecting that the attack prerequisite (AT:P) requires the application to feed untrusted data into the merge sink and that impact is limited to integrity and availability of client-side state with no confidentiality loss and no direct remote code execution absent a further gadget chain.

Know when Prototype Pollution gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Vaadin) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
vuln.today AI 4.8 MEDIUM

Network-reachable with no auth or interaction, but AC:H because the app must expose an untrusted object to the merge sink; prototype pollution yields partial integrity/availability and no confidentiality.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:L
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (Vaadin).

CVSS VectorVendor: Vaadin

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Sep 30, 2026 - 14:01 EUVD

DescriptionCVE.org

A prototype pollution vulnerability exists in the deep merge helpers of Vaadin Charts and Vaadin Component Base. Merging an object the application does not control into a chart configuration or into a component's i18n property writes onto Object.prototype, making the injected properties visible to every object in the running application.

Users of affected versions should apply the following mitigation or upgrade. Releases that have fixed this issue include:

Product version Vaadin 23.0.0 - 23.6.13 Vaadin 24.0.0 - 24.9.20 Vaadin 24.10.0 - 24.10.9 Vaadin 25.0.0 - 25.1.11 Vaadin 25.2.0 - 25.2.6

Mitigation Upgrade to 23.6.14 Upgrade to 24.9.21 Upgrade to 24.10.10 Upgrade to 25.1.12 Upgrade to 25.2.7 or newer

Please 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.

Artifacts Maven coordinates Vulnerable versions Fixed version com.vaadin:vaadin 23.0.0 - 23.6.13 >=23.6.14 com.vaadin:vaadin 24.0.0 - 24.9.20 >=24.9.21 com.vaadin:vaadin 24.10.0 - 24.10.9 >=24.10.10 com.vaadin:vaadin 25.0.0 - 25.1.11 >=25.1.12 com.vaadin:vaadin 25.2.0 - 25.2.6 >=25.2.7 com.vaadin:vaadin-core 24.7.0 - 24.9.20 >=24.9.21 com.vaadin:vaadin-core 24.10.0 - 24.10.9 >=24.10.10 com.vaadin:vaadin-core 25.0.0 - 25.1.11 >=25.1.12 com.vaadin:vaadin-core 25.2.0 - 25.2.6 >=25.2.7 com.vaadin:vaadin-charts-flow 23.0.0 - 23.6.13 >=23.6.14 com.vaadin:vaadin-charts-flow 24.0.0 - 24.9.20 >=24.9.21 com.vaadin:vaadin-charts-flow 24.10.0 - 24.10.9 >=24.10.10 com.vaadin:vaadin-charts-flow 25.0.0 - 25.1.11 >=25.1.12 com.vaadin:vaadin-charts-flow 25.2.0 - 25.2.6 >=25.2.7

npm packages npm package Vulnerable versions Fixed version @vaadin/charts 23.0.0 - 23.6.4 >=23.6.5 @vaadin/charts 24.0.0 - 24.9.17 >=24.9.18 @vaadin/charts 24.10.0 - 24.10.4 >=24.10.5 @vaadin/charts 25.0.0 - 25.1.11 >=25.1.12 @vaadin/charts 25.2.0 - 25.2.8 >=25.2.9 @vaadin/component-base 24.7.0 - 24.9.17 >=24.9.18 @vaadin/component-base 24.10.0 - 24.10.4 >=24.10.5 @vaadin/component-base 25.0.0 - 25.1.11 >=25.1.12 @vaadin/component-base 25.2.0 - 25.2.8 >=25.2.9

Threat Intelligence Overview

EPSS Score
0.6%
Top 51% exploitable
Prevalence
Medium
widely-used enterprise Java/web-components UI framework, common but not ubiquitous
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.6%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

33
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

CVE-2026-34621 HIGH POC
8.6 Apr 11

Prototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu

CVE-2021-23450 CRITICAL POC
9.8 Dec 17

All versions of package dojo are vulnerable to Prototype Pollution via the setObject function. Rated critical severity (

CVE-2024-56059 CRITICAL
9.8 Dec 18

Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau

CVE-2021-23383 CRITICAL POC
9.8 May 04

The package handlebars before 4.7.7 are vulnerable to Prototype Pollution when selecting certain compiling options to co

CVE-2020-7788 CRITICAL POC
9.8 Dec 11

This affects the package ini before 1.3.6. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitabl

CVE-2020-28271 CRITICAL POC
9.8 Nov 12

Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service

CVE-2023-38894 CRITICAL POC
9.8 Aug 16

A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi

CVE-2024-24292 CRITICAL POC
9.8 Mar 28

A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function

CVE-2023-26121 CRITICAL POC
10.0 Apr 11

All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s

CVE-2021-23449 CRITICAL POC
10.0 Oct 18

This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr

CVE-2024-39011 CRITICAL POC
9.8 Jul 30

Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser

CVE-2024-38988 CRITICAL POC
9.8 Mar 28

alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy