CVE-2026-45398
Open WebUI: IDOR - Retrieval API Bypasses Knowledge Base Access Controls
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
Open WebUI: IDOR - Retrieval API Bypasses Knowledge Base Access Controls
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.
- Record
CVE-2026-45398- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-639
- Updated
- 2026-11-02
EUVDEUVD-2026-30634
7.5
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.
- Record
EUVD-2026-30634- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-4g37-7p2c-38r9
7.5
Open WebUI Vulnerable to IDOR: Retrieval API Bypasses Knowledge Base Access Controls
IDOR: Retrieval API Bypasses Knowledge Base Access Controls
Author: Andrew Orr [email protected]
Summary
_validate_collection_access() (PR #22109) 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.
Reproduced on main at commit 4d058a125 (v0.8.11) on March 26, 2026.
Severity
- CWE-639: Authorization Bypass Through User-Controlled Key
- CVSS 3.1:
7.5 (AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H)--AC:Hbecause exploitation requires knowing a target UUID;I:HandA:Hbecause the write path allows poisoning or destruction of another user's knowledge base
Default Configuration Reachability
Reachable in default configuration. All affected endpoints require only get_verified_user, not get_admin_user, so any non-admin account in a typical multi-user deployment can reach them. The only prerequisite beyond authentication is knowledge of a target knowledge base UUID, which is reflected in the AC:H score. However, KB UUIDs are stable identifiers that leak through normal usage rather than secrets (see Prerequisites below).
Root Cause
Knowledge base embeddings are stored in vector DB collections named with the knowledge base's UUID (e.g., 550e8400-e29b-41d4-a716-446655440000). The _validate_collection_access function only blocks two specific prefixes:
# backend/open_webui/routers/retrieval.py lines 2330-2355
def _validate_collection_access(collection_names: list[str], user) -> None:
if user.role == "admin":
return
for name in collection_names:
if name.startswith("user-memory-") and name != f"user-memory-{user.id}":
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
elif name.startswith("file-"):
file_id = name[len("file-"):]
if not has_access_to_file(
file_id=file_id,
access_type="read",
user=user,
):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
# No else clause -- knowledge base UUIDs pass through unchecked
Knowledge base UUIDs do not match either prefix, so the function returns without raising an exception. The query then executes against the vector DB with no further authorization check.
Vulnerable Endpoints
Read Endpoints
Both retrieval query endpoints accept a collection name and call _validate_collection_access as their sole authorization gate:
POST /api/v1/retrieval/query/doc(line 2367) -- singlecollection_namePOST /api/v1/retrieval/query/collection(line 2432) -- list ofcollection_names
Write Endpoints
The following endpoints accept a collection_name parameter and write to the target collection without checking whether the caller owns it:
POST /api/v1/retrieval/process/text(line 1777) -- appends attacker-controlled content to the target collectionPOST /api/v1/retrieval/process/file(line 1528) -- validates ownership of the uploaded file but not the destination collectionPOST /api/v1/retrieval/process/files/batch(line 2578) -- same as above for multiple filesPOST /api/v1/retrieval/process/webandPOST /api/v1/retrieval/process/youtube(lines 1810-1811) -- same handler;overwrite…
- Record
GHSA-4g37-7p2c-38r9- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-639
- Updated
- 2026-11-02
NVD
7.5
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.
- Record
CVE-2026-45398- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-639
- Updated
- 2026-11-02
OSV
7.5
Open WebUI: IDOR - Retrieval API Bypasses Knowledge Base Access Controls
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.
- Record
CVE-2026-45398- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-639
- Updated
- 2026-11-02
OSVGHSA-4g37-7p2c-38r9
7.5
Open WebUI Vulnerable to IDOR: Retrieval API Bypasses Knowledge Base Access Controls
IDOR: Retrieval API Bypasses Knowledge Base Access Controls
Author: Andrew Orr [email protected]
Summary
_validate_collection_access() (PR #22109) 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.
Reproduced on main at commit 4d058a125 (v0.8.11) on March 26, 2026.
Severity
- CWE-639: Authorization Bypass Through User-Controlled Key
- CVSS 3.1:
7.5 (AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H)--AC:Hbecause exploitation requires knowing a target UUID;I:HandA:Hbecause the write path allows poisoning or destruction of another user's knowledge base
Default Configuration Reachability
Reachable in default configuration. All affected endpoints require only get_verified_user, not get_admin_user, so any non-admin account in a typical multi-user deployment can reach them. The only prerequisite beyond authentication is knowledge of a target knowledge base UUID, which is reflected in the AC:H score. However, KB UUIDs are stable identifiers that leak through normal usage rather than secrets (see Prerequisites below).
Root Cause
Knowledge base embeddings are stored in vector DB collections named with the knowledge base's UUID (e.g., 550e8400-e29b-41d4-a716-446655440000). The _validate_collection_access function only blocks two specific prefixes:
# backend/open_webui/routers/retrieval.py lines 2330-2355
def _validate_collection_access(collection_names: list[str], user) -> None:
if user.role == "admin":
return
for name in collection_names:
if name.startswith("user-memory-") and name != f"user-memory-{user.id}":
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
elif name.startswith("file-"):
file_id = name[len("file-"):]
if not has_access_to_file(
file_id=file_id,
access_type="read",
user=user,
):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
# No else clause -- knowledge base UUIDs pass through unchecked
Knowledge base UUIDs do not match either prefix, so the function returns without raising an exception. The query then executes against the vector DB with no further authorization check.
Vulnerable Endpoints
Read Endpoints
Both retrieval query endpoints accept a collection name and call _validate_collection_access as their sole authorization gate:
POST /api/v1/retrieval/query/doc(line 2367) -- singlecollection_namePOST /api/v1/retrieval/query/collection(line 2432) -- list ofcollection_names
Write Endpoints
The following endpoints accept a collection_name parameter and write to the target collection without checking whether the caller owns it:
POST /api/v1/retrieval/process/text(line 1777) -- appends attacker-controlled content to the target collectionPOST /api/v1/retrieval/process/file(line 1528) -- validates ownership of the uploaded file but not the destination collectionPOST /api/v1/retrieval/process/files/batch(line 2578) -- same as above for multiple filesPOST /api/v1/retrieval/process/webandPOST /api/v1/retrieval/process/youtube(lines 1810-1811) -- same handler;overwrite…
- Record
GHSA-4g37-7p2c-38r9- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-639
- Updated
- 2026-11-02
OSVPYSEC-2026-2699
7.5
Open WebUI Vulnerable to IDOR: Retrieval API Bypasses Knowledge Base Access Controls
IDOR: Retrieval API Bypasses Knowledge Base Access Controls
Author: Andrew Orr [email protected]
Summary
_validate_collection_access() (PR #22109) 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.
Reproduced on main at commit 4d058a125 (v0.8.11) on March 26, 2026.
Severity
- CWE-639: Authorization Bypass Through User-Controlled Key
- CVSS 3.1:
7.5 (AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H)--AC:Hbecause exploitation requires knowing a target UUID;I:HandA:Hbecause the write path allows poisoning or destruction of another user's knowledge base
Default Configuration Reachability
Reachable in default configuration. All affected endpoints require only get_verified_user, not get_admin_user, so any non-admin account in a typical multi-user deployment can reach them. The only prerequisite beyond authentication is knowledge of a target knowledge base UUID, which is reflected in the AC:H score. However, KB UUIDs are stable identifiers that leak through normal usage rather than secrets (see Prerequisites below).
Root Cause
Knowledge base embeddings are stored in vector DB collections named with the knowledge base's UUID (e.g., 550e8400-e29b-41d4-a716-446655440000). The _validate_collection_access function only blocks two specific prefixes:
# backend/open_webui/routers/retrieval.py lines 2330-2355
def _validate_collection_access(collection_names: list[str], user) -> None:
if user.role == "admin":
return
for name in collection_names:
if name.startswith("user-memory-") and name != f"user-memory-{user.id}":
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
elif name.startswith("file-"):
file_id = name[len("file-"):]
if not has_access_to_file(
file_id=file_id,
access_type="read",
user=user,
):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
# No else clause -- knowledge base UUIDs pass through unchecked
Knowledge base UUIDs do not match either prefix, so the function returns without raising an exception. The query then executes against the vector DB with no further authorization check.
Vulnerable Endpoints
Read Endpoints
Both retrieval query endpoints accept a collection name and call _validate_collection_access as their sole authorization gate:
POST /api/v1/retrieval/query/doc(line 2367) -- singlecollection_namePOST /api/v1/retrieval/query/collection(line 2432) -- list ofcollection_names
Write Endpoints
The following endpoints accept a collection_name parameter and write to the target collection without checking whether the caller owns it:
POST /api/v1/retrieval/process/text(line 1777) -- appends attacker-controlled content to the target collectionPOST /api/v1/retrieval/process/file(line 1528) -- validates ownership of the uploaded file but not the destination collectionPOST /api/v1/retrieval/process/files/batch(line 2578) -- same as above for multiple filesPOST /api/v1/retrieval/process/webandPOST /api/v1/retrieval/process/youtube(lines 1810-1811) -- same handler;overwrite…
- Record
PYSEC-2026-2699- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
open-webuiPyPI |
through 0.9.4 | 0.9.5 |
open-webuiPyPI |
before 0.9.5, plus listed versions 0.1.1240.1.1250.2.00.2.10.2.2 Show 45 moreShow less0.2.30.2.40.2.50.3.00.3.10.3.100.3.120.3.130.3.140.3.150.3.160.3.170.3.17.dev20.3.17.dev30.3.17.dev40.3.17.dev50.3.180.3.190.3.20.3.200.3.210.3.220.3.230.3.240.3.250.3.260.3.270.3.27.dev10.3.27.dev20.3.27.dev30.3.280.3.290.3.30.3.300.3.30.dev10.3.30.dev20.3.310.3.31.dev10.3.320.3.330.3.33.dev10.3.340.3.350.3.40.3.5 |
0.9.5 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-45398 is a high vulnerability (CVSS 7.5) in Openwebui Open Webui, published May 14, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.33%, the 26th percentile. Fixed in open-webui 0.9.5.
References
github.com/open-webui/open-webui/security/advisories/GHSA-4g37-7p2c-38r9
github.com/open-webui/open-webui/pull/22109
github.com/open-webui/open-webui/releases/tag/v0.9.5
nvd.nist.gov/vuln/detail/CVE-2026-45398
github.com/advisories/GHSA-4g37-7p2c-38r9
github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45398.json
github.com/open-webui/open-webui
pypi.org/project/open-webui
Left out here: 106 versions and the rest of 3 source descriptions. The JSON record has them.