GHSA-rcqf-f6h2-ccg9: XSS
Impact The component language strings shown in the edit mode sidebar are parsed as HTML rather than inserted as text. An attacker who controls those language options can supply markup carrying event handlers, which execute in the origin of the page hosting the dashboard once the sidebar renders the affected labels. Exploitation requires that untrusted data reach the Dashboards language configuration and that a user open the edit mode sidebar.
Workarounds
Until you can upgrade, patch EditMode once at application startup. The hook runs before the sidebar is built, so the labels are already harmless by the time they are rendered. Assigning a string to textContent and reading back innerHTML turns any markup into literal text, which is exactly what the fixed version renders.
After importing the module, use this code snipped once, before any board is created.
js { const EditMode = window.Dashboards?.EditMode; const escapeHTML = (text) => text .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>'); const patched = new WeakSet(); const originalInit = EditMode.prototype.init;
EditMode.prototype.init = function (...args) { const labels = this.lang?.sidebar;
if (labels && !patched.has(this)) { patched.add(this);
for (const key of Object.keys(labels)) { if (typeof labels[key] === 'string') { labels[key] = escapeHTML(labels[key]); } } }
return originalInit.apply(this, args); }; }
If your application does not need Edit Mode, leaving it disabled (editMode.enabled: false) removes the exposure as well.
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/dashboards@4.2.3. If you load Highcharts Dashboards from a CDN, use a versioned URL, for example https://code.highcharts.com/dashboards/4.2.3/dashboards.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/@highcharts/dashboardsto a version that resolves this vulnerability.Fixed in 4.2.3 - Upgrade
Upgrade
@highcharts/dashboardsto a version that resolves this vulnerability.Fixed in 4.2.3 - Configuration
Disable Edit Mode by setting editMode.enabled to false if the application does not require it.
Highcharts Dashboards Edit Mode editMode.enabled = false - Compensating control
Until upgrading, patch EditMode once at application startup before any board is created: override EditMode.prototype.init to HTML-escape sidebar language strings by replacing '&' with '&', '<' with '<', and '>' with '>' before invoking the original initializer.
Event History
Frequently Asked Questions
Who is exposed to this issue?
Applications using npm/@highcharts/dashboards are exposed if untrusted data can control the Dashboards language configuration, specifically the sidebar language labels, and users can open the dashboard edit-mode sidebar.
What must happen for exploitation to occur?
An attacker must supply markup with event handlers through the Dashboards language options. The payload executes in the origin hosting the dashboard when a user opens edit mode and the sidebar renders the affected label.
Is there a mitigation if upgrading is not immediately possible?
Yes. Patch EditMode once at application startup, after importing the module and before any board is created, so sidebar labels are escaped before the sidebar is built. The provided workaround converts markup into literal text by escaping ampersands and angle brackets.
How can I identify potentially affected deployments?
Review dashboard language configuration for sidebar labels sourced from untrusted or user-controlled data. Deployments where users open the edit-mode sidebar after such labels are configured are potentially affected.