Apache ECharts Lines XSS漏洞CVE-2026-45249
Apache ECharts 是开源数据可视化图表库,支持免费商用,支持折线、柱状、饼图、地图、热力图等各类图表,交互丰富、适配多端。
一、基本情况
Apache ECharts是开源JavaScript图表库,基于 JavaScript 开发,可快速在网页中实现数据展示、动态渲染与大屏可视化,应用广泛。
Apache ECharts 由百度开源、Apache 基金会托管,这款软件可兼容各类浏览器与移动端,支持大数据量渲染、动态更新、联动交互。

Apache ECharts 是开源JavaScript可视化库,采用声明式框架设计,帮开发者快速创建基于 Web 的交互式图表,支持PC和移动设备。
栋科技漏洞库关注到 6.1.0 之前所有版本的 Apache ECharts中存在的安全漏洞,已被追踪为CVE-2026-45249,暂无官方CVSS评分。
二、漏洞分析
CVE-2026-45249漏洞是 Apache ECharts 的折线图系列提示框渲染逻辑中存在的一个跨站脚本(XSS)漏洞,该漏洞现已得到修复。
受影响版本中,LinesSeriesModel类的getDataItemName方法在处理 series.data[i].name 时,直接返回未经HTML转义的原始字符串。
当用户使用Lines series并启用tooltip且未自定义tooltip.formatter时,name值通过innerHTML方式渲染到tooltip中导致跨站脚本执行。
在 6.1.0 之前的版本中,若同时使用折线图系列与提示框功能,且未自定义提示框格式化器,同时指定了 series.data [i].name 属性,
则原始 HTML 字符串格式的 series.data [i].name 会通过 innerHTML 直接渲染到提示框内容中。
尽管提示框允许通过自定义格式化器接收用户提供的原始 HTML,但内置提示框格式化器通常会自动执行 HTML 转义。
该场景违背了这一常规逻辑,可能在提示框显示时意外导致脚本执行。
“安全模型与检查清单” 章节已列出直接接收原始 HTML 的应用程序接口。
不可信的 HTML 可能引发跨站脚本攻击及相关攻击,因此在将内容传入 ECharts 前需进行额外处理。
修复版本中通过改用createTooltipMarkup("nameValue", {...})方法处理name字段,利用该方法内部的HTML转义机制防止恶意脚本执行。
下面介绍三种常用防护手段:HTML 转义、内容净化、沙箱隔离。
多数场景下使用 HTML 转义即可,若未转义内容来自不可信来源则另作处理。
1、HTML 转义
数据拼接为 HTML 字符串前,必须执行 HTML 转义。这不仅关乎安全,也是保障内容正常展示的基础要求。
最基础、最常用的 HTML 转义实现为以下字符转换:
'&' => '&'
'<' => '<'
'>' => '>'
'"' => '"'
"'" => ''
It removes the functionality from the markup characters, thereby closing the attack vector for code injection (e.g., <script>...</script>), regardless of whether the content is trusted or untrusted.
For example,
// Incorrect and unsafe.
formatter: params => {
const { name, value } = params;
// May cause incorrect rendering if `name` or `value` contain functional
// charactors like '<', '>', etc.
// Additionally, it introduces XSS risks if `name` or `value` come from
// untrusted sources, where malicious code may be injected into that strings.
return `${name}, <b>${value}</b>`;
}
// Correct and safe.
formatter: params => {
const { name, value } = params;
return `${echarts.format.encodeHTML(name)}, <b>${echarts.format.encodeHTML(value)}<b/>`;
}
也可使用DOM接口的textContent属性完成HTML转义。
多数应用场景中,用户输入等不可信内容仅作为纯文本展示,而HTML标签、属性等标记内容由应用方全权管控,属于可信内容。
此种情况下,只要对所有不可信内容做好转义处理,仅使用HTML转义就能简单有效防范跨站脚本攻击。
2、内容净化
部分场景需要解析不可信的HTML标记。
例如,数据库中的文本可能包含`<em>`、`<a href="...">`等样式或功能标签,这类标签需要正常渲染,而非以纯文本形式展示。
还有一种情况:
允许用户或不可信来源提供HTML模板,用于定义页面结构与样式,后续模板结合数据生成最终可渲染HTML,并传入ECharts。
这类场景安全风险更高。在禁止内嵌脚本与样式代码执行的前提下,可采用内容净化降低风险。
内容净化工具会依据预设白名单过滤HTML内容,例如移除`<script>`、`<style>`代码块、`<link>`标签、行内样式、onclick等事件属性,
以及使用javascript:、data:协议的链接。建议选用成熟且持续维护的专业净化工具,不要自行编写正则表达式或手动处理字符串。
可根据产品需求与威胁模型,在客户端、服务端或两端同时执行内容净化。
对于用户提交等客户端来源内容,仅依靠客户端净化并不安全,攻击者可绕过前端直接向服务端提交恶意载荷。
举个例子,在线可视化编辑器支持可视化编辑内容,用户可选用内置HTML片段、模板或脚本方法(如提示框、标签格式化函数)。
若前端生成的HTML或脚本内容直接上传至服务端并存入数据库,未做额外处理,攻击者可伪造网络请求注入恶意代码。
当相关内容被读取并调用chart.setOption()方法时,恶意代码就会执行。针对该场景,推荐以下防护方案:
(1)仅将内置片段、模板、脚本方法的编号存入数据库,不存储客户端传来的原始代码。
(2)若允许用户自定义片段以丰富展示效果,可引入第三方字符串模板库抵御注入攻击。
(3)若必须支持用户自定义HTML,数据入库前务必在服务端执行严格的内容净化与校验,清除所有脚本、样式及其他不安全内容。
同时可使用沙箱化内嵌窗口,限制潜在安全问题造成的影响。
依靠内容净化实现全面防护并非易事,不仅需要合理配置规则,还要跟随浏览器迭代持续更新,且通常需要搭配其他防护机制,
才能满足多数实际场景的安全要求。HTML语法体系繁杂,允许不可信内容使用的功能越多,潜在攻击路径也就越多。
3、沙箱隔离
若必须执行不可信代码,或其他防护手段力度不足,可使用沙箱化内嵌框架提升安全等级,JSFiddle、CodePen 等平台均采用该方案。
三、影响范围
Apache ECharts < 6.1.0
四、修复建议
Apache ECharts ≥ 6.1.0
五、参考链接
管理员已设置登录后刷新可查看