GHSA-rmqc-xvr3-v46c: Npm/highcharts vulnerability
Impact A dot-separated key path taken from series.keys is followed without filtering the individual segments. An attacker who controls series.keys and the matching point data can use a path such as proto.polluted to set arbitrary properties on Object.prototype. The resulting properties are visible to all JavaScript running in the page, not only to the chart. No user interaction is required beyond rendering the chart.
The injected properties are inert until other code on the page reads them, so consequences depend on the consuming application.
Workarounds Drop-in fix - for any versions affected (6.1.0-13.0.2). Add the below IIFE to run after Highcharts is loaded.
javascript ((H)=>{const X = H.isObject;H.Point.prototype.setNestedProperty = function setNestedProperty(t,e,i){let s=i.split(".");return s.some(t=>"proto"===t||"constructor"===t)||s.reduce(function(t,i,s,o){let r=o.length-1===s;return t[i]=r?e:X(t[i],!0)?t[i]:{},t[i]},t),t};})(Highcharts);
Live demo & testing
Obtaining the patched version The patched releases are available from all the usual distribution channels. With npm, upgrade the affected package to the patched version listed above, for example npm install highcharts@13.1.1. If you load Highcharts from the CDN, use the versioned URLs on code.highcharts.com, for example https://code.highcharts.com/13.1.1/highcharts.js. For more on each installation method, see the installation guide.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/highchartsto a version that resolves this vulnerability.Fixed in 11.4.9 - Upgrade
Upgrade
npm/highchartsto a version that resolves this vulnerability.Fixed in 13.1.0 - Upgrade
Upgrade
npm/highchartsto a version that resolves this vulnerability.Fixed in 12.6.1 - Upgrade
Upgrade
highchartsto a version that resolves this vulnerability.Fixed in 13.1.1 - Compensating control
Add the provided IIFE after Highcharts is loaded to override Highcharts.Point.prototype.setNestedProperty and reject '__proto__' and 'constructor' segments in dot-separated paths.
Event History
Frequently Asked Questions
Which deployments are exposed?
Highcharts versions 6.1.0 through 13.0.2 are affected when an attacker can control both series.keys and the corresponding point data used to render a chart.
Does exploitation require a user to interact with the chart?
No. Rendering the chart is sufficient; no user interaction is required.
What can be done if upgrading is not immediately possible?
Apply the provided drop-in IIFE after Highcharts loads. It replaces Point.prototype.setNestedProperty and rejects key-path segments named __proto__ or constructor.
What is the practical impact after a successful injection?
Arbitrary properties can be added to Object.prototype, making them visible to all JavaScript on the page. The added properties are inert unless other page code reads them, so downstream impact depends on the application.