Skip to main content

Open WebUI EUVDEUVD-2026-38522

| CVE-2026-54021 MEDIUM
Incorrect Authorization (CWE-863)
2026-06-17 https://github.com/open-webui/open-webui GHSA-9rpj-v7hf-vv2w
6.3
CVSS 3.1 · Vendor: https://github.com/open-webui/open-webui
Share

Severity by source

Vendor (https://github.com/open-webui/open-webui) PRIMARY
6.3 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
vuln.today AI
6.3 MEDIUM

PR:L because a valid authenticated account is mandatory; C/I/A all Low because impact is unauthorized backend access without credential exfiltration, data disclosure, or scope change.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/open-webui/open-webui).

CVSS VectorVendor: https://github.com/open-webui/open-webui

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
Low

Lifecycle Timeline

2
Source Code Evidence Fetched
Jun 18, 2026 - 01:53 vuln.today
Analysis Generated
Jun 18, 2026 - 01:53 vuln.today

DescriptionCVE.org

Summary

Several direct, index-addressed Ollama proxy routes accept a caller-supplied url_idx path parameter and use it as a raw index into the admin-configured OLLAMA_BASE_URLS list. Access control on these routes validates only whether the user may use the requested *model*, never which *backend* the request is routed to. Any authenticated user can append an arbitrary url_idx to force their request onto an Ollama backend they were never authorized to reach, including internal, higher-privilege, or explicitly admin-disabled backends.

Affected endpoints

All indexed Ollama routes that resolve the backend through get_ollama_url():

POST /ollama/api/chat/{url_idx}
POST /ollama/api/generate/{url_idx}
POST /ollama/api/embed/{url_idx}
POST /ollama/api/embeddings/{url_idx}
POST /ollama/v1/chat/completions/{url_idx}
POST /ollama/v1/completions/{url_idx}
POST /ollama/v1/messages/{url_idx}
POST /ollama/v1/responses/{url_idx}

Root cause

backend/open_webui/routers/ollama.py - get_ollama_url() consults the model-to-backend allow-list (OLLAMA_MODELS[model]["urls"]) only when url_idx is omitted. When the caller supplies url_idx, that mapping is skipped and the value is used directly as an index:

python
async def get_ollama_url(request: Request, model: str, url_idx: Optional[int] = None):
    if url_idx is None:
        models = request.app.state.OLLAMA_MODELS
        if model not in models:
            raise HTTPException(...)
        url_idx = random.choice(models[model].get("urls", []))
    url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
# caller-controlled, no authz
    return url, url_idx

The outbound request is then sent to that backend using the backend's own configured API key. Backends an admin has disabled (OLLAMA_API_CONFIGS["<idx>"].enable = false) are hidden from model discovery but remain reachable through the indexed route, because the disabled state is never re-checked at request time.

Impact

A verified, non-admin user with read access to any single model can:

  • route requests to internal / higher-capability / restricted Ollama backends in

multi-backend deployments, bypassing backend-level isolation;

  • reach backends the admin has explicitly disabled;
  • have those requests authenticated with the target backend's configured API key

(the key is used server-side; it is not returned to the attacker);

  • consume the restricted backend's compute.

There is no cross-user data disclosure and no exfiltration of the backend credential itself; the impact is unauthorized access to, and use of, restricted backend resources.

Affected / Patched

  • Affected: <= 0.9.5
  • Patched: >= 0.9.6

Fix

0.9.6 adds validate_ollama_backend_idx(), invoked on every indexed route (directly and via get_ollama_url()), which returns 403 for any non-admin caller-supplied url_idx that is not in the requested model's allowed urls. Because disabled backends are absent from every model's urls, the same check also blocks routing to disabled backends.

AnalysisAI

Incorrect authorization in Open WebUI versions 0.9.5 and earlier allows any authenticated non-admin user to route LLM inference requests to arbitrary configured Ollama backends - including internally restricted, higher-privilege, or admin-disabled instances - by supplying a raw integer url_idx path parameter on eight indexed proxy routes. The flaw bypasses backend-level access isolation entirely: model authorization is checked, but backend authorization is silently skipped when url_idx is caller-supplied, and disabled backends remain reachable because their disabled state is never re-evaluated at request time. No public exploit code and no CISA KEV listing have been identified at time of analysis; however, the attack requires only a valid user account and knowledge of the URL pattern, making it a low-barrier insider threat in any multi-backend deployment.

Technical ContextAI

Open WebUI is a Python-based (FastAPI) web interface for managing and proxying requests to one or more Ollama LLM backends. In multi-backend configurations, admins populate OLLAMA_BASE_URLS as an ordered list and assign models to specific backend indices via OLLAMA_MODELS[model]['urls']. The vulnerable function get_ollama_url() in backend/open_webui/routers/ollama.py contains a conditional branch: when url_idx is absent, it enforces the model-to-backend allowlist; when url_idx is present (caller-supplied), it skips that check entirely and indexes directly into OLLAMA_BASE_URLS[url_idx]. Eight POST routes expose this parameter in their URL path. The root cause is CWE-863 (Incorrect Authorization): the system correctly authenticates the user and checks model-level permissions, but omits the orthogonal authorization check of whether the authenticated user is permitted to target a specific backend index. The affected package is pip/open-webui (CPE: pkg:pip/open-webui). The fix in 0.9.6 introduces validate_ollama_backend_idx() called on every indexed route, returning HTTP 403 for any non-admin url_idx not present in the requested model's authorized backend list.

RemediationAI

Upgrade open-webui to version 0.9.6 or later, which is the vendor-released patch (confirmed by GitHub Security Advisory GHSA-9rpj-v7hf-vv2w). Version 0.9.6 introduces validate_ollama_backend_idx() on all eight affected indexed routes, enforcing that any caller-supplied url_idx is present in the model's authorized backend list and blocking routing to disabled backends. The advisory is at https://github.com/open-webui/open-webui/security/advisories/GHSA-9rpj-v7hf-vv2w. If immediate upgrade is not feasible, a compensating control is to block the /{url_idx} path variants at the reverse proxy or API gateway layer (e.g., deny any request path matching /ollama/(api|v1)/[^/]+/[0-9]+$); note this will break any clients that depend on direct backend indexing and may affect legitimate admin workflows. A second workaround - with significant operational trade-off - is to consolidate to a single Ollama backend, eliminating the attack surface entirely at the cost of multi-backend capability.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Share

EUVD-2026-38522 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy