Highcharts Core: `javascript:` URL in an `xlink:href` attribute survives text filtering and reaches exported charts
CVE-2026-116796 · GHSA-mw4f-gj5x-6xr4 · published 28 Oct 2026
How serious is it
- Severity: high, CVSS score 7.2 out of 10.
- No exploit prediction (EPSS) score yet.
- Not on the CISA list of exploited vulnerabilities.
- No public exploit in Exploit-DB.
Is your app affected by CVE-2026-116796?
Paste this prompt into Claude Code, Cursor or any AI coding tool: it runs a free Shippable scan of your project and fixes what it finds. Built with Lovable, Bolt or v0? Scan your live app. Or upload your package file.
Who is affected
highcharts(npm) >= 10.3.2, < 11.4.9highcharts(npm) >= 12.0.0, < 12.6.2highcharts(npm) >= 13.0.0, <= 13.1.0
How to check
- Run
npm ls highchartsin your project to see the installed version, including copies pulled in by other packages. - Or paste your lockfile into the checker: it lists every package with a known vulnerability, this one included.
- Or run
npx shippable-dev scan localhost:3000in your project folder. It reads your lockfile and flags this vulnerability along with every other known one.
How to fix
Copies a prompt for Claude Code, Cursor or Codex: it checks your lockfiles for this and upgrades it.
- On >= 10.3.2, < 11.4.9: Upgrade
highchartsto 11.4.9 or later, commit the lockfile and redeploy. - On >= 12.0.0, < 12.6.2: Upgrade
highchartsto 12.6.2 or later, commit the lockfile and redeploy. - On >= 13.0.0, <= 13.1.0: Upgrade
highchartsto 13.1.1 or later, commit the lockfile and redeploy. - If a vulnerable version was live, check your logs and rotate the secrets that server could read.
The advisory
### Impact
The filter applied to markup in text options checks `href`, `src` and a few similar attributes against an allowed-scheme list, but accepts `xlink:href` without that check, so an SVG anchor whose `xlink:href` is a `javascript:` URL passes the filter, whether or not the option is rendered with `useHTML`. In the live page the attribute is written without the XLink namespace, so browsers do not treat the anchor as a link there.
The attribute is preserved verbatim in the chart's serialised output: the SVG produced by the exporting module, including the default SVG download, declares the XLink namespace and contains the anchor, and so does the markup of the chart container. Any document that parses that output again, such as the downloaded SVG opened in a browser or a page that inlines exported or server-rendered chart markup, then holds a working link, and an attacker who controls the chart configuration can thereby run script in the origin of that document when a user activates the link.
Exploitation requires that untrusted data reach a text option such as the title, that the chart be exported or its markup be serialised and parsed again, and that a user activate the link.
### Workarounds
Drop-in fix for all affected versions (10.3.2 - 13.1.0).
Add the below IIFE to run after Highcharts is loaded, before creating a chart.
```
!function(t){var e=t&&t.AST;if(e&&"function"==typeof e.filterUserAttributes&&!e.xlinkHrefPatched){var r=e.filterUserAttributes,n=Object.prototype.hasOwnProperty;e.filterUserAttributes=function(t){return t&&n.call(t,"xlink:href")&&!o(t["xlink:href"])&&delete t["xlink:href"],r.call(this,t)},e.xlinkHrefPatched=!0}function o(t){var r=e.allowedReferences||["https://","http://","mailto:","/","../","./","#"];return"string"==typeof t&&r.some(function(e){return 0===t.indexOf(e)})}}(Highcharts);
```
### 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](https://www.highcharts.com/docs/getting-started/installation).
Check your whole app
Dependencies are only half of it. Free and read-only: before you push, run npx shippable-dev scan localhost:3000 in your project folder, no account needed. For your live app, you prove it's yours with a one-line tag first.
References
- github.com/highcharts/highcharts/security/advisories/GHSA-mw4f-gj5x-6xr4
- nvd.nist.gov/vuln/detail/CVE-2026-116796
- github.com/highcharts/highcharts/commit/6cf359fb144aa51fdc105e2b9bbd013439b02c88
- github.com/highcharts/highcharts/releases/tag/v13.1.1
- github.com/advisories/GHSA-mw4f-gj5x-6xr4
- github.com/highcharts/highcharts
Merged from GitHub Advisory Database, OSV. Last updated 29 Oct 2026. All vulnerabilities · RSS · JSON