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.
PUBLISHED5.2ApplicationCWE-79
IBM vulnerable to cross-site scripting (XSS) via unsanitized title truncation
Problem type
Affected products
IBM
@carbon/charts
<= 1.27.19 - AFFECTED
@carbon/charts-react
<= 1.27.19 - AFFECTED
@carbon/charts-angular
<= 1.27.19 - AFFECTED
@carbon/charts-vue
<= 1.27.19 - AFFECTED
@carbon/charts-svelte
<= 1.27.19 - AFFECTED
References
JSON source
https://cveawg.mitre.org/api/cve/CVE-2026-94402Click to expand
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-94402",
"assignerOrgId": "9a959283-ebb5-44b6-b705-dcc2bbced522",
"assignerShortName": "ibm",
"dateUpdated": "2026-10-20T21:31:46.027Z",
"dateReserved": "2026-09-21T13:43:42.740Z",
"datePublished": "2026-10-20T21:31:46.027Z",
"state": "PUBLISHED"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "9a959283-ebb5-44b6-b705-dcc2bbced522",
"shortName": "ibm",
"dateUpdated": "2026-10-20T21:31:46.027Z"
},
"title": "IBM vulnerable to cross-site scripting (XSS) via unsanitized title truncation",
"descriptions": [
{
"lang": "en",
"value": "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.",
"supportingMedia": [
{
"type": "text/html",
"base64": false,
"value": "<p>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.</p>"
}
]
}
],
"affected": [
{
"vendor": "IBM",
"product": "@carbon/charts",
"cpes": [
"cpe:2.3:a:ibm:carbon_charts:0.4.0:*:*:*:*:*:*:*",
"cpe:2.3:a:ibm:carbon_charts:1.27.19:*:*:*:*:*:*:*"
],
"versions": [
{
"version": "0.4.0",
"status": "affected",
"versionType": "semver",
"lessThanOrEqual": "1.27.19"
}
]
},
{
"vendor": "IBM",
"product": "@carbon/charts-react",
"cpes": [
"cpe:2.3:a:ibm:carboncharts_react:0.4.0:*:*:*:*:*:*:*",
"cpe:2.3:a:ibm:carboncharts_react:1.27.19:*:*:*:*:*:*:*"
],
"versions": [
{
"version": "0.4.0",
"status": "affected",
"versionType": "semver",
"lessThanOrEqual": "1.27.19"
}
]
},
{
"vendor": "IBM",
"product": "@carbon/charts-angular",
"cpes": [
"cpe:2.3:a:ibm:carboncharts_angular:0.4.0:*:*:*:*:*:*:*",
"cpe:2.3:a:ibm:carboncharts_angular:1.27.19:*:*:*:*:*:*:*"
],
"versions": [
{
"version": "0.4.0",
"status": "affected",
"versionType": "semver",
"lessThanOrEqual": "1.27.19"
}
]
},
{
"vendor": "IBM",
"product": "@carbon/charts-vue",
"cpes": [
"cpe:2.3:a:ibm:carboncharts_vue:0.4.0:*:*:*:*:*:*:*",
"cpe:2.3:a:ibm:carboncharts_vue:1.27.19:*:*:*:*:*:*:*"
],
"versions": [
{
"version": "0.4.0",
"status": "affected",
"versionType": "semver",
"lessThanOrEqual": "1.27.19"
}
]
},
{
"vendor": "IBM",
"product": "@carbon/charts-svelte",
"cpes": [
"cpe:2.3:a:ibm:carboncharts_svelte:0.4.0:*:*:*:*:*:*:*",
"cpe:2.3:a:ibm:carboncharts_svelte:1.27.19:*:*:*:*:*:*:*"
],
"versions": [
{
"version": "0.4.0",
"status": "affected",
"versionType": "semver",
"lessThanOrEqual": "1.27.19"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"lang": "en",
"description": "CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')",
"cweId": "CWE-79",
"type": "CWE"
}
]
}
],
"references": [
{
"url": "https://www.ibm.com/support/pages/node/7291785",
"tags": [
"vendor-advisory",
"patch"
]
}
],
"metrics": [
{
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
],
"cvssV3_1": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "REQUIRED",
"scope": "CHANGED",
"confidentialityImpact": "LOW",
"integrityImpact": "LOW",
"availabilityImpact": "NONE",
"baseScore": 6.1,
"baseSeverity": "MEDIUM"
}
}
],
"workarounds": [
{
"lang": "en",
"value": "If an immediate upgrade to v1.27.20 is not possible, consuming applications should sanitize all user-influenced strings before passing them as data[0].group (or any label field) to a MeterChart. A DOMPurify call with ALLOWED_TAGS: [] applied to the value before it reaches the chart data will neutralize the payload. This is a temporary workaround only — upgrading to v1.27.20 remains the recommended remediation.",
"supportingMedia": [
{
"type": "text/html",
"base64": false,
"value": "<p>If an immediate upgrade to v1.27.20 is not possible, consuming applications should sanitize all user-influenced strings before passing them as data[0].group (or any label field) to a MeterChart. A DOMPurify call with ALLOWED_TAGS: [] applied to the value before it reaches the chart data will neutralize the payload. This is a temporary workaround only — upgrading to v1.27.20 remains the recommended remediation.</p>"
}
]
}
],
"solutions": [
{
"lang": "en",
"value": "Please update the library to the latest version available on npm: https://www.npmjs.com/package/@carbon/charts",
"supportingMedia": [
{
"type": "text/html",
"base64": false,
"value": "<p>Please update the library to the latest version available on npm: <a href=\"https://www.npmjs.com/package/@carbon/charts\" rel=\"nofollow\">https://www.npmjs.com/package/@carbon/charts</a></p>"
}
]
}
]
}
}
}