0x0 背景介绍
Open WebUI 是一个自托管的人工智能平台,设计为完全离线运行。当启用以富文本形式插入提示功能时,将自定义提示插入聊天窗口的功能存在 DOM XSS 漏洞,任何拥有创建提示权限的用户都可以利用此漏洞植入有效载荷最终导致远程命令注入漏洞。
0x1 环境搭建(Ubuntu24+docker)
1.前置条件
- 配置
AI模型(模拟真实场景),有很多办法,我这里使用内置阿里云的KEY进行 - 访问阿里云百炼进行密钥创建即可阿里云百炼-key

2.项目搭建
- 创建
docker-compose.yml文件 - 注意
OPENAI_API_KEYS更新为申请的key
yml
version: "3"
services:
open-webui:
image: ghcr.io/open-webui/open-webui:v0.6.34
container_name: open-webui-vuln
restart: always
ports:
- "3000:8080"
environment:
- WEBUI_AUTH=False
- OPENAI_API_BASE_URLS=https://dashscope.aliyuncs.com/compatible-mode/v1
- OPENAI_API_KEYS=sk-xxx-你的key
volumes:
- open-webui-vuln:/app/backend/data
volumes:
open-webui-vuln:
- 启动环境
bash
docker compose up -d
3.环境配置
- 搭建完成后,大约2分钟就可以访问了,创建登录的账密即可
- 登录后开启
以富文本的形式回填提示词

0x2 漏洞复现
手动复现步骤
-
创建提示词

-
创建新对话,输入
/引用刚刚的提示词就直接弹窗了

Python检测
bash
https://github.com/Kai-One001/cve-/blob/main/openui-shell-CVE-2025-64495.py
- 特定反弹
shell,因为fetch('...')含引号,被marked转义,导致语法错误。


PCAP检测
-
示例是更新接口,其实响应都一样,可以看到恶意语句

-
反弹也是同样的,通用检测都可以识别

0x3 漏洞原理分析
漏洞定位
- 通过比对官方补丁变更记录(见下图),可快速锁定漏洞文件:
- 漏洞文件:
RichTextInput.svelte - 文件位置:
src/lib/components/common/RichTextInput.svelte

js
if (insertPromptAsRichText) {
const htmlContent = marked
.parse(text, {
breaks: true,
gfm: true
})
.trim();
// Create a temporary div to parse HTML
const tempDiv = document.createElement('div');
tempDiv.innerHTML = htmlContent;
}
-
简要说明:当用户启用了
"以富文本形式插入提示时,将提示内容text渲染为HTML并插入编辑器。具体流程如下: -
使用
marked.parse()将用户输入的text(Markdown 格式)转换为HTML字符串; -
创建一个临时
<div>元素,并通过innerHTML将生成的HTML注入其中,以便后续转换为ProseMirror节点; -
Marked库默认允许在Markdown中嵌入原始HTML,这意味着攻击者可以在自定义提示的content字段中直接插入HTML标签这些标签会被marked.parse()原样保留,并通过innerHTML注入DOM,从而触发XSS攻击。
修复对比
- 在官方修复提交中,开发者移除了原有的直接使用
marked.parse()生成HTML的方式,并引入了DOMPurify库对HTML内容进行安全净化:
js
import DOMPurify from 'dompurify';
// ...
const htmlContent = DOMPurify.sanitize(
marked.parse(text, {
breaks: true,
gfm: true
}).trim()
);
- 引入
dompurify库,用于清理HTML中恶意数据,防止XSS; - 保留了
marked.parse()的Markdown渲染能力,确保富文本格式正常显示; - 外层包裹
DOMPurify.sanitize(),对生成的HTML字符串进行深度清理; DOMPurify.sanitize(htmlString)返回安全的 HTML。
0x4 修复建议
修复方案
- 升级到安全版本:公告链接github-open-webui-0.6.36
- 临时缓解措施:
临时禁用富文本: 临时禁用以富文本形式插入提示功能,避免输入未过滤的HTML内容
安全监控: 在WAF配置规则,检测针对/prompt、/rich-text等接口的异常HTML/JS注入行为
免责声明:本文仅用于安全研究目的,未经授权不得用于非法渗透测试活动。