Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessInject untrusted value as table/component column ID
-
DeliveryTrigger DataTable.setCell via connector write-back or cell edit
-
ExploitWrite integer-keyed value onto Object.prototype/constructor
-
ExecutionPolluted prototype corrupts array/object reads and for-in enumeration
-
ImpactDivert application control flow or disrupt rendering
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 attacker to control a table or component column ID and to cause a cell, point, or API write. In Dashboards the unsafe write is reached by default through the Highcharts component's connector write-back (allowConnectorUpdate is enabled by default), taking the column ID from columnAssignment (or the series name in the earliest releases) when a point is updated; in Grid Pro it is reached through cell editing in earlier releases and remains reachable through the public DataTable API. Untrusted data must therefore reach the board or Grid configuration. In Dashboards releases that still support column aliases, a literal __proto__ ID is redirected harmlessly by the alias map, but an alias whose target is __proto__ (accepted by the connector's data table options) reaches the unsafe write; later alias-free releases accept a literal __proto__ or constructor ID directly. Limiting factors: only integer-keyed (row-index) properties can be set - named properties cannot be reached through these paths; a write action (point update or cell edit) is required; and impact beyond rendering disruption depends on how the consuming application reads polluted objects. |
| Impact | This is a medium-severity client-side prototype pollution issue (CVSS 4.0 base 6.9; CWE-1321). The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:L/VA:H/SC:L/SI:L/SA:L) describes a network-reachable but privilege- and interaction-dependent flaw: PR:L and UI:A mean the attacker must be able to get untrusted data into a table/component column ID and trigger a write, not a pure remote-unauthenticated hit. Impact skews toward availability (VA:H - rendering disruption/DoS of the page) with only limited integrity impact (VI:L) and explicitly no confidentiality impact (VC:N), consistent with the advisory noting that only integer-keyed properties can be set and named properties cannot be reached. The vuln.today decision label is 'this_month' (not act_now/emergency), a patch is available, and there is no CISA KEV listing and no EPSS score in the input, so there is no evidence of active exploitation. No public exploit code is referenced - only the vendor GHSA advisory and the fix commit. Net: a genuine defect worth patching on a normal cadence rather than an emergency; real-world severity is bounded because exploitation requires attacker-controlled column IDs plus a write path, and consequences beyond disruption depend entirely on how the consuming application reads polluted objects. Missing data to note explicitly: EPSS is absent (cannot gauge exploitation probability) and there is a fixed-version discrepancy across sources (see confidence notes). |
| Exploit ScenarioDerived | An attacker who can influence data that becomes a Highcharts DataTable column ID - for example through a Dashboards connector write-back (enabled by default via allowConnectorUpdate) or Grid Pro cell editing - supplies a column ID of __proto__ or constructor (or, in alias-supporting Dashboards releases, an alias whose target is __proto__) and triggers a point update or cell write. DataTable.setCell then writes an integer-indexed value onto Object.prototype or the Object constructor, polluting every object and array on the page so that out-of-range reads and for...in loops return attacker-supplied values, altering control flow or breaking rendering. No public exploit code is referenced; only the vendor advisory and fix commit are available. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Prototype pollution in Highcharts Dashboards (1.0.0 through 4.2.1) and Grid Pro (2.0.0 through 3.1.0) lets an attacker who controls a table or component column ID cause DataTable.setCell and related writers to store attacker-supplied values on Object.prototype or the Object constructor under integer (row-index) keys. The unsafe write is reachable by default in Dashboards through the Highcharts component's connector write-back (allowConnectorUpdate), taking the column ID from columnAssignment when a point is updated, and through cell editing and the public DataTable API in Grid Pro; a point update, cell edit, or API write is required, along with user interaction. Successful pollution influences array and object reads and for-in enumeration across the page, which can divert application control flow and disrupt rendering; the assessed impact is low integrity and high availability with no confidentiality impact, rated medium severity (CVSS 4.0 base 6.9, CWE-1321). No public exploit code and no confirmed active exploitation were identified at time of analysis, and vendor patches are available (Dashboards 4.2.2, Grid Pro 3.2.0).
RemediationAI
Upgrade to the patched releases: @highcharts/dashboards 4.2.2 or later (the vendor advisory's npm example installs @highcharts/dashboards@4.2.3, and EUVD likewise lists 4.2.3 as the fixed dashboards version, so use 4.2.3 unless your distribution channel confirms 4.2.2 already contains the fix) and @highcharts/grid-pro 3.2.0; when loading from a CDN, reference a versioned URL such as https://code.highcharts.com/dashboards/4.2.3/dashboards.js. If upgrading immediately is not possible, the vendor documents two measures that must be used together: strip '__proto__' and 'constructor' keys from untrusted column data before it is handed to a grid, board or DataTable (the only measure that covers the DataTable constructor), and, if column IDs from untrusted input reach setCell, changeColumnId or setColumns, monkey-patch those DataTable prototype methods at startup to reject the unsafe IDs and filter column keys - the trade-off is that both workarounds depend on the application correctly identifying every untrusted entry point, and the prototype patch must run after Grid or Dashboards is loaded. Details and reference code are in https://github.com/highcharts/highcharts/security/advisories/GHSA-c75x-9x9h-28rm.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 5 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
CWE-1321 (improperly controlled modification of object prototype attributes) applies here because Highcharts' DataTable stores columns in a plain object keyed by column ID and previously used truthiness and direct indexing rather than own-property checks. A column ID of __proto__ therefore resolves to Object.prototype, is mistaken for an existing column, and the single-cell write lands at the row index on Object.prototype; an ID of constructor writes onto the Object constructor in the same manner. Because the keys are numeric row indices, only integer-keyed properties can be injected - named properties cannot be reached through these paths - but those integer keys still alter reads of out-of-range indices on any array or plain object and appear in for-in enumeration of unrelated objects, so consuming code can take branches based on attacker-supplied data or fail to render. In Dashboards releases that still supported column aliases, a literal __proto__ ID is redirected harmlessly through the alias map, while an alias whose target is __proto__ (accepted via the connector's data table options) reaches the unsafe write; later alias-free releases accept the unsafe ID directly. The upstream fix in commit 02dd9349 adds explicit rejection of '__proto__' and 'constructor' plus Object.hasOwnProperty.call checks in DataTable.changeColumnId, setCell and column iteration, and equivalent guards in DataTableCore. Impact beyond disruption depends on how the consuming application reads the polluted objects.
Know when Highcharts 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:L/VA:H/SC:L/SI:L/SA:L
Network-reachable but needs attacker-controlled column ID plus a write/interaction, so PR:L and UI:R; no confidentiality as only integer keys are set (C:N); low integrity, high availability from page-wide rendering disruption; prototype pollution affects code beyond the component, so S:C.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Highcharts JS is a JavaScript charting library based on SVG. From 1.0.0 until Dashboards 4.2.2, and from 2.0.0 until Grid Pro 3.2.0, Highcharts DataTable single-cell writers use an untrusted column ID as a key without rejecting __proto__ or constructor. DataTable.setCell, including Dashboards connector write-back and Grid Pro editing paths, can therefore write integer-indexed values onto Object.prototype or the Object constructor. In Dashboards releases with column aliases, a literal __proto__ ID is redirected by the alias map, while an alias targeting __proto__ reaches the unsafe write; later releases without aliases accept the unsafe ID directly. Those inherited values affect array and object reads and for-in enumeration throughout the page, which can alter application control flow or disrupt rendering. Exploitation requires control of the table or component column ID and a cell, point, or API write. This issue is fixed in Dashboards 4.2.2 and Grid Pro 3.2.0.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Highcharts
View allDOM-based cross-site scripting in Highcharts Grid (@highcharts/grid-lite and @highcharts/grid-pro) versions 2.0.0 throug
Cross-site scripting in Highcharts Dashboards (npm @highcharts/dashboards) from 1.0.0 through 4.2.1 lets an attacker who
Event-handler attribute injection in Highcharts Grid's custom SVG icon definitions (npm packages @highcharts/grid-lite a
Cross-site scripting in Highcharts Grid Pro 2.0.0 through 3.1.0 lets an attacker who can influence column configuration
A DOM-based cross-site scripting flaw in Highcharts Grid lets an attacker who can influence the Grid configuration set c
DOM-based cross-site scripting in Highcharts Dashboards edit mode lets markup placed in the fullscreen language labels e
Improper neutralization of HTML in the Highcharts Dashboards edit-mode sidebar lets markup supplied through the Dashboar
Cross-site scripting in Highcharts JS (Core, plus the Stock, Maps and Gantt builds shipped from the same package) affect
Cross-site scripting in Highcharts JS affects the 10.x branch before 11.4.9, 12.x before 12.6.1, and 13.x through 13.0.2
Prototype pollution in the Highcharts JS charting library (6.1.0 up to 11.4.9, 12.0.0 up to 12.6.1, and 13.0.0 through 1
Prototype pollution in Highcharts JS 13.0.0 through 13.0.2 lets attacker-controlled series point data write integer-keye
Client-side cross-site scripting in Highcharts 12.0.0 through <12.6.1 and 13.0.0 through 13.0.2 - including the Stock, M
EUVD-2026-112310
GHSA-c75x-9x9h-28rm
NVD
CVE.org
Exploit-DB