CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-87017

CVE-2026-87017: Broken Object-Level Authorization (BOLA) in Open WebUI Knowledge Search

Alon Barad
Alon Barad
Software Engineer

Sep 10, 2026·7 min read·3 visits

Executive Summary (TL;DR)

Eleven of fifteen vector database backends in Open WebUI ignored query filters, allowing authenticated users to enumerate metadata of unauthorized knowledge bases.

A Broken Object-Level Authorization (BOLA) vulnerability exists in Open WebUI starting from version 0.7.0 up to (but not including) 0.11.1. The flaw resides in the platform's built-in knowledge search tool, which constructs metadata filters to scope database queries based on user permissions. However, eleven of the fifteen shipped vector database backends accepted these filters but silently ignored them, enabling authenticated users to retrieve and enumerate the metadata of inaccessible or private knowledge bases.

Vulnerability Overview

Open WebUI is an extensible self-hosted artificial intelligence platform. The platform implements a built-in knowledge search tool to retrieve document context and ground language model interactions. Users can define private or shared knowledge bases containing documents, which are subsequently indexed in a vector database backend.

The platform provides integration with fifteen distinct vector database backends. When a user queries the system, the application is designed to identify the knowledge bases that the specific user is authorized to read. It then generates a metadata filter specifying those authorized identifiers, passing the filter constraint to the active vector database wrapper to isolate the search space.

In versions 0.7.0 through 0.11.0, eleven of the fifteen supported vector backends received the authorization filter parameter but failed to apply it during database query generation. This design inconsistency resulted in a broken object-level authorization (BOLA) vulnerability. Consequently, search queries executed by authenticated low-privilege users could match against and expose records from unshared or restricted collections.

Root Cause Analysis

The root cause of this vulnerability lies in an architectural misalignment within the vector client adapters. The abstract base class VectorDBBase specifies filter: Optional[dict] = None in its standard search method signature. However, the concrete class implementations for eleven vector database clients failed to implement translation or passing of this parameter to their respective backend search engines.

When a query is dispatched, the database wrapper is responsible for converting the generic dictionary filter structure into the native query syntax of the target vector store. Because the wrapper implementations silently dropped the filter parameter, the resulting database query did not contain any metadata constraints. The database engine executed a global search across the index, returning matched vectors regardless of their original knowledge base ownership.

The exposure is primarily limited to metadata associated with the matched vector points. This metadata typically includes the unique identifiers, names, and descriptions of the knowledge bases. Although the primary text contents of the documents are stored in separate collections, the leaked metadata exposes sensitive organizational taxonomies, file structures, and descriptive summaries to unauthorized authenticated users.

Code Analysis

An examination of the vulnerable and patched code reveals the omission of the filter parsing logic. In the Elasticsearch backend (elasticsearch.py) before the patch, the search method hardcoded the query to filter solely on the static collection name. The incoming filter argument was completely unused during query construction.

# Vulnerable Elasticsearch Query Construction
query = {
    'size': limit,
    '_source': ['text', 'metadata'],
    'query': {
        'script_score': {
            'query': {'bool': {'filter': [{'term': {'collection': collection_name}}]}},
            'script': {
                'source': "cosineSimilarity(params.vector, 'vector') + 1.0",
                ...
            }
        }
    }
}

The remediation introduces a helper function _metadata_filter to map operations such as $in into Elasticsearch terms queries, and dynamically appends these conditions to the filter array.

# Patched Elasticsearch Query Construction
def _metadata_filter(key: str, op: str, value: Any) -> dict:
    if op == '$in':
        return {'terms': {f'metadata.{key}': value}}
    return {'term': {f'metadata.{key}': value}}
 
# Inside the patched search() method
filters = [{'term': {'collection': collection_name}}]
if filter:
    filters.extend(_metadata_filter(key, op, value) for key, op, value in iter_filter_conditions(filter))
 
query = {
    'size': limit,
    '_source': ['text', 'metadata'],
    'query': {
        'script_score': {
            'query': {'bool': {'filter': filters}},
            ...
        }
    }
}

Similarly, the Qdrant backend implementation was updated to translate generic metadata constraints into formal Qdrant FieldCondition models. The patch maps standard filtering operators to either MatchAny or MatchValue conditions, ensuring the query includes a defined query_filter attribute.

# Patched Qdrant Filter Construction
def _metadata_filter(key: str, op: str, value: Any) -> models.FieldCondition:
    match = models.MatchAny(any=value) if op == '$in' else models.MatchValue(value=value)
    return models.FieldCondition(key=f'metadata.{key}', match=match)
 
# Applying filter in search()
conditions = [_metadata_filter(key, op, value) for key, op, value in iter_filter_conditions(filter)]
query_filter = models.Filter(must=conditions) if conditions else None

Exploitation Methodology

The exploitation of this vulnerability does not require complex payloads or high privileges. An attacker must first authenticate to the target Open WebUI instance with a standard user account. The vulnerability is triggered when the attacker submits a query that forces the platform to execute a knowledge search, or when they interact directly with backend API endpoints responsible for knowledge retrieval.

When the query is initiated, the platform backend correctly calculates the attacker's authorization scope, producing a metadata filter containing only the knowledge bases they are allowed to read. However, because the active vector client wrapper (such as Milvus or Qdrant) silently discards the filter parameter, the query executes globally.

The vector database processes the semantic similarity of the query against all stored vectors, including those belonging to other users' private knowledge bases. The database returns the closest matches along with their metadata. The application then propagates these results back, presenting the attacker with the titles, descriptions, and IDs of unauthorized knowledge bases.

A representation of this flow is shown in the sequence below:

Impact Assessment

The primary security impact of CVE-2026-87017 is the unauthorized exposure of sensitive metadata. This includes knowledge base identifiers, names, and descriptions belonging to other users or administrators. In many enterprise settings, knowledge base names and descriptions contain confidential information such as project names, internal server names, or proprietary product details.

The vulnerability has been assigned a CVSS score of 4.3 (Medium) with the vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N. The impact is restricted to confidentiality, with no integrity or availability implications. The exploitability is low because the attack requires authenticated access, but the execution complexity is low since the application logic bypasses the security boundary automatically.

While the document body text itself is typically stored in separate collections, the exposure of metadata acts as a valuable reconnaissance tool. An attacker can map the structure of an organization's knowledge store, identifying target repositories or project frameworks for subsequent attacks or social engineering campaigns.

Remediation and Mitigation

The primary and most effective remediation step is upgrading the Open WebUI installation to version 0.11.1 or higher. The developers have successfully refactored the vector database adapters to properly map, validate, and apply metadata filters to prevent global index queries.

If an immediate upgrade is not feasible, several defensive mitigation strategies can be applied. Administrators can disable the built-in knowledge search tool globally or restrict its use to trusted roles via the admin configuration panel. This restricts the vector database query path from being triggered by arbitrary users.

Alternatively, administrators can switch the active vector database backend to Chroma. The Chroma backend adapter correctly implemented and applied metadata filters in older versions and was not affected by this vulnerability. Another alternative is physical segmentation, where sensitive knowledge bases are deployed to separate, isolated vector store instances.

Fix Analysis (1)

Technical Appendix

CVSS Score
4.3/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
EPSS Probability
0.21%
Top 89% most exploited

Affected Systems

Open WebUI

Affected Versions Detail

Product
Affected Versions
Fixed Version
Open WebUI
open-webui
>= 0.7.0, < 0.11.10.11.1
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork (AV:N)
CVSS v3.1 Score4.3 (Medium)
Exploit StatusProof-of-Concept (PoC) / Known Root Cause
KEV StatusNot Listed
Affected ComponentsVector database client adapters

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
T1005Data from Local System
Collection
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check, allowing attackers to bypass intended security policies.

Vulnerability Timeline

Fix commit 1d6d4e6e6647e1d403438ede7bd9ba20bc4cc8f6 authored and merged.
2026-08-25
Security advisory GHSA-pcvc-8vrv-8q6w and Open WebUI v0.11.1 published.
2026-09-09
CVE-2026-87017 published to NVD.
2026-09-09

References & Sources

  • [1]GitHub Security Advisory GHSA-pcvc-8vrv-8q6w
  • [2]Fix Commit 1d6d4e
  • [3]Open WebUI v0.11.1 Release Notes
  • [4]NVD CVE-2026-87017 Details
  • [5]CVE.org CVE-2026-87017 Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•15 minutes ago•GHSA-M3WP-48JR-VR4G
7.5

GHSA-m3wp-48jr-vr4g: Unbounded Remote Media Fetch and Video Frame Expansion DoS in mistral.rs

An unbounded resource consumption and server-side request forgery (SSRF) vulnerability in mistral.rs allows remote, unauthenticated attackers to cause a denial of service (DoS) or execute SSRF attacks. The flaw exists in mistralrs-server-core due to unchecked remote media fetching, infinite stream buffering, and unbounded FFmpeg frame extraction.

Amit Schendel
Amit Schendel
1 views•8 min read
•about 1 hour ago•CVE-2026-86083
7.7

CVE-2026-86083: Sandbox Escape and Remote Code Execution via Code-Printer Injection in n8n Legacy Expression Engine

A critical sandbox escape vulnerability exists in the legacy expression engine of n8n. By leveraging Shared Builtin Tampering combined with Code-Printer Injection, an authenticated attacker can hijack the mutable global JSON.stringify function. This hijacking allows the attacker to inject arbitrary Node.js source code into internal execution contexts during code generation, escaping the isolated-vm sandbox and achieving full remote code execution on the host system.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 3 hours ago•CVE-2026-86076
8.7

CVE-2026-86076: Remote Code Execution via Expression Sandbox Escape in n8n

An expression sandbox escape vulnerability exists in n8n due to a missing AST traversal check on ClassBody in the PrototypeSanitizer. This allows authenticated users with low privileges to bypass property checks and achieve remote code execution.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 4 hours ago•CVE-2026-86075
8.7

CVE-2026-86075: Unauthenticated Persistent Storage Exhaustion via OAuth Dynamic Client Registration Endpoint in n8n

In vulnerable configurations of n8n, the OAuth Dynamic Client Registration endpoint implements field size validation for redirect_uris but fails to enforce proper limits on client_name and grant_types. This allows an unauthenticated remote attacker to submit arbitrarily large values for these fields, leading to persistent database and disk storage exhaustion.

Alon Barad
Alon Barad
4 views•5 min read
•about 5 hours ago•CVE-2026-86081
7.1

CVE-2026-86081: Regular Expression Denial of Service in n8n Git Node

A Regular Expression Denial of Service (ReDoS) vulnerability exists in n8n due to inefficient validation in its default blocked-file-pattern matching mechanism. This flaw can be triggered during Git operations, allowing authenticated workflow editors to cause resource exhaustion and completely freeze the n8n application process.

Amit Schendel
Amit Schendel
5 views•5 min read
•about 5 hours ago•CVE-2025-21587
7.4

CVE-2025-21587: Timing Side-Channel Vulnerability in JSSE RSA Decryption

CVE-2025-21587 is a high-severity timing side-channel vulnerability in the Java Secure Socket Extension (JSSE) component of Oracle Java SE and GraalVM. The flaw allows unauthenticated network attackers to perform Bleichenbacher-style (Marvin) decryption oracle attacks, potentially compromising TLS session confidentiality.

Amit Schendel
Amit Schendel
6 views•7 min read