{"id":"GHSA-6hgp-fmhr-mrg4","revision":"8b709705855d485ba008fea523c29aed","records":[{"revision":"8b709705855d485ba008fea523c29aed","observedAt":"2026-10-28T20:55:42.711+00:00","statement":{"source":"osv","id":"GHSA-6hgp-fmhr-mrg4","aliases":["CVE-2026-118255"],"title":"Highcharts Grid: `javascript:` URL in credits.href runs script on click","description":"### Impact\nAn attacker who controls the Grid configuration can set `credits.href` to a `javascript:` URL. The value is not validated against an allowed-scheme list before it is applied to the credits link, so activating that link runs attacker-supplied script in the origin of the page hosting the Grid. Exploitation requires that untrusted data reach the Grid configuration and that a user activate the credits link. Script running this way has the same access to page data, storage and session state as the hosting application.\n\n### Workarounds\nPaste in after the Grid Pro module is imported, before a Grid is created.\n\n```javascript\nconst { AST } = Grid;\n\nfunction sanitize(options) {\n    const credits = options && options.credits;\n\n    if (credits && typeof credits.href === 'string') {\n        const filtered = AST.filterUserAttributes({ href: credits.href });\n\n        if (!filtered.href) {\n            delete credits.href;\n        }\n    }\n\n    return options;\n}\n\n// Both Grid.grid() and grid.update() funnel through loadUserOptions, so one\n// hook covers both entry points.\nconst { prototype } = Grid.Grid;\nconst loadUserOptions = prototype.loadUserOptions;\n\nprototype.loadUserOptions = function (options, ...rest) {\n    sanitize(options);\n    return loadUserOptions.call(this, options, ...rest);\n};\n```\n\n### Obtaining the patched version\nThe 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/grid-lite@3.2.0`. If you load Highcharts Grid from a CDN, use a versioned URL, for example `https://cdn.jsdelivr.net/npm/@highcharts/grid-lite@3.2.0/grid-lite.js`. For more on each installation method, see the [installation guide](https://www.highcharts.com/docs/grid/installation).","state":0,"publishedAt":"2026-10-28T19:57:48+00:00","modifiedAt":"2026-10-28T20:15:05.4527242+00:00","affected":[{"ecosystem":"npm","name":"@highcharts/dashboards","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"3.2.0"},{"kind":"fixed","version":"4.0.0"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"npm","name":"@highcharts/grid-pro","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"2.0.0"},{"kind":"fixed","version":"3.2.0"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V4","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","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/highcharts/highcharts/security/advisories/GHSA-6hgp-fmhr-mrg4","https://github.com/highcharts/highcharts/pull/25351","https://github.com/highcharts/highcharts/commit/45b74403acafbe9f621c4a343506721d9129e991","https://github.com/highcharts/highcharts","https://github.com/highcharts/highcharts/releases/tag/grid-v3.2.0"],"sourceUrl":"https://github.com/advisories/GHSA-6hgp-fmhr-mrg4","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-6hgp-fmhr-mrg4","identifiers":["GHSA-6hgp-fmhr-mrg4","CVE-2026-118255"]},"retained":false,"historicalAffected":[]}],"coverage":[]}