OpenWebui 富文本提示词 远程命令注入漏洞 | CVE-2025-64495 复现&研究

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 修复建议

修复方案

  1. 升级到安全版本:公告链接github-open-webui-0.6.36
  2. 临时缓解措施:
    临时禁用富文本: 临时禁用以富文本形式插入提示功能,避免输入未过滤的HTML内容
    安全监控:WAF配置规则,检测针对 /prompt、/rich-text 等接口的异常HTML/JS注入行为

免责声明:本文仅用于安全研究目的,未经授权不得用于非法渗透测试活动。

相关推荐
恒锐丰科技林技术员36 分钟前
EG2302 半桥驱动芯片详解:高压半桥高性价比栅极驱动方案
经验分享·嵌入式硬件·硬件工程
BestHeaker6 小时前
制造业 MES 开发入门:和互联网业务开发的 5 个本质差异(一)
数据库·经验分享·制造业·mes
IT小白杨6 小时前
Facebook广告账户环境隔离实战:从指纹自洽到代理固定的完整工程方案
大数据·经验分享·架构·facebook·指纹浏览器
wukong267 小时前
支持GEO关键词挖掘的优化系统推荐|2026AI获客核心工具
经验分享
畅想视界ThinkView8 小时前
医美光电仪器配套触控终端怎么选?2026年皮肤检测设备市场53亿,这台“小屏“决定顾客体验
经验分享
熊野君9 小时前
第 7 章 AI时代产品经理新增能力
大数据·人工智能·经验分享·职场和发展·产品经理
恒锐丰科技林技术员10 小时前
EG1191 宽压降压 DC‑DC 芯片解析:高性价比工业电源方案
经验分享·嵌入式硬件·硬件工程
JSCircuit10 小时前
高校材料工艺实验室采购真空甲酸炉的深度分析与选型指南
人工智能·经验分享·ai写作
COHESION_201015 小时前
分级净化+选择性树脂工艺 在地下水轻微硝酸盐超标治理中的应用
经验分享·其他
jedi-knight15 小时前
Codex接入本地QWen3.8模型
人工智能·经验分享