IPBUF安全漏洞报告
English
CVE-2026-43900 CVSS 9.3 严重

CVE-2026-43900: DeepChat HTML实体绕过导致的存储型XSS漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-43900
漏洞类型
XSS
CVSS评分
9.3 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
DeepChat

相关标签

XSSDeepChatHTML实体绕过SVG注入CVSS-9.3

漏洞概述

DeepChat是一个开源的人工智能代理平台。在v1.0.4-beta.1版本之前,该平台存在一个严重的跨站脚本(XSS)漏洞。漏洞成因在于后端的SVGSanitizer组件与前端Vue.js的渲染机制之间存在差异。后端使用正则表达式清洗`javascript:`协议以防止脚本执行,但未考虑到HTML实体编码的处理。当前端使用`v-html`指令渲染经过清洗的SVG内容时,会自动解码HTML实体,导致攻击者构造的混淆载荷(如`javascript:`)绕过过滤,最终在受害者浏览器中执行任意JavaScript代码。

技术细节

该漏洞源于DeepChat处理SVG工件时的逻辑缺陷。具体来说,`src/main/lib/svgSanitizer.ts` 文件中的清洗逻辑主要依赖纯文本正则表达式来识别并移除危险的`javascript:`协议。然而,这种过滤机制存在盲点:它直接对输入字符串进行匹配,而没有先对HTML实体进行解码。

在前端渲染阶段,`SvgArtifact.vue` 组件使用Vue.js的`v-html`指令将SVG内容插入DOM。根据HTML规范和Vue的实现机制,`v-html`在渲染前会自动解析HTML实体。因此,攻击者可以利用这一特性,将`javascript:`关键字中的字符进行HTML实体编码(例如将`a`编码为`a`)。

攻击流程如下:攻击者提交包含混淆实体的SVG载荷(如`<svg><a href="j&#x61;vascript:alert(1)">click</a></svg>`)。后端正则匹配器检测不到完整的`javascript:`字符串,放行了该数据。当受害者浏览包含该工件的页面时,Vue将`j&#x61;vascript:`还原为`javascript:`,并触发执行。由于无需认证即可触发(PR:N)且影响范围广(S:C),该漏洞风险极高。

攻击链分析

STEP 1
侦察与准备
攻击者确认目标运行DeepChat平台且版本低于v1.0.4-beta.1,并准备好混淆的SVG载荷。
STEP 2
载荷投递
攻击者向平台提交包含HTML实体混淆(如j&#x61;vascript:)的恶意SVG工件。
STEP 3
后端过滤绕过
DeepChat后端的SVGSanitizer使用正则表达式检查,因未解码实体而无法识别恶意代码,载荷被成功存储。
STEP 4
前端渲染与触发
当受害者访问包含该工件的页面时,Vue.js使用v-html渲染SVG,自动解码HTML实体。
STEP 5
代码执行
解码后的javascript:协议在受害者浏览器中被执行,导致XSS攻击成功。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- PoC for CVE-2026-43900 --> <!-- This SVG payload uses HTML entity encoding to bypass the backend regex sanitizer --> <svg xmlns="http://www.w3.org/2000/svg"> <a href="j&#x61;vascript:alert('CVE-2026-43900_Executed')"> <text x="10" y="50" font-size="30">Click Me</text> </a> </svg>

影响范围

DeepChat < v1.0.4-beta.1

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用或严格限制SVG工件的渲染功能。对于必须渲染的场景,应在服务端对输入内容进行HTML实体解码后再进行安全扫描,或者在前端实施严格的CSP策略以禁止执行内联脚本。

参考链接