---
id: "CVE-2026-94402"
kind: "vulnerability"
aliases: ["CVE-2026-94402"]
title: "IBM Carbon Charts: MeterChart titles let attackers run script in browsers"
severity: "medium"
cvss: 6.1
epss: 0.00302
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["carbon-charts", "frontend", "javascript", "package", "web-apps"]
not_affected_if: ["no-meterchart", "static-labels"]
published_at: "2026-10-20T22:21:07+00:00"
first_seen_at: "2026-10-23T21:57:27+00:00"
updated_at: "2026-10-25T04:03:31+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-94402", "first_seen_at": "2026-10-23T21:57:27+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-94402", "first_seen_at": "2026-10-24T13:15:55+00:00"}]
---

# IBM Carbon Charts: MeterChart titles let attackers run script in browsers

IBM Carbon Charts versions 0.4.0 through 1.27.19 insert user-supplied label text into the page through innerHTML without sanitizing it when a MeterChart title is too wide for its container. An attacker who gets such a label into a chart can run JavaScript in the browser session of anyone who views it.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed `@carbon/charts` or `@carbon/charts-react` version in `package.json` and the lockfile; affected range is `0.4.0` through `1.27.19`.
- Search the codebase for `MeterChart` usage where the title or labels come from user input.

## Fix

- Upgrade `@carbon/charts` past `1.27.19` (fixed version unknown from the sources; check the IBM advisory).
- Until upgraded, do not pass untrusted text into MeterChart titles or labels.

## Timeline

- 2026-10-23T21:57:27+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-94402
- 2026-10-24T13:15:55+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-94402

## From the sources

IBM Carbon Charts 0.4.0 through 1.27.19 is vulnerable to cross-site scripting. The MeterChart component's Title.truncateTitle() function re-inserts a substring of user-supplied label text into the DOM via an unsanitized innerHTML write when the title exceeds the available container width. A remote attacker could exploit this vulnerability to execute arbitrary JavaScript in the victim's browser session.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
