首页 网络安全 正文

Apache ECharts Lines XSS漏洞CVE-2026-45249

摘要

栋科技漏洞库关注到 6.1.0 之前所有版本的 Apache ECharts中存在的安全漏洞,已被追踪为CVE-2026-45249,暂无官方CVSS评分。

Apache ECharts 是开源数据可视化图表库,支持免费商用,支持折线、柱状、饼图、地图、热力图等各类图表,交互丰富、适配多端。

一、基本情况

Apache ECharts是开源JavaScript图表库,基于 JavaScript 开发,可快速在网页中实现数据展示、动态渲染与大屏可视化,应用广泛。

Apache ECharts 由百度开源、Apache 基金会托管,这款软件可兼容各类浏览器与移动端,支持大数据量渲染、动态更新、联动交互。

Apache ECharts Lines XSS漏洞CVE-2026-45249

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 转义实现为以下字符转换:

'&' => '&'
'<' => '&lt;'
'>' => '&gt;'
'"' => '&quot;'
"'" => '&#39;
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

五、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接