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-59215

CVE-2026-59215: Insecure Direct Object Reference in Open WebUI Thread Message Lookup

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 24, 2026·6 min read·4 visits

Executive Summary (TL;DR)

Authenticated users can read private messages and channel threads they do not own by exploiting missing channel-binding validation in thread parent-message lookups.

A Broken Object Level Authorization (BOLA) / Insecure Direct Object Reference (IDOR) vulnerability in Open WebUI prior to v0.10.0 allows authenticated users to access and disclose private message contents, thread context, and channel metadata from other restricted private or Direct Message (DM) channels without proper authorization.

Vulnerability Overview

Open WebUI is a self-hosted, extensible AI platform designed to provide a rich chat interface for various language models. In versions prior to v0.10.0, the platform contains an Insecure Direct Object Reference (IDOR) vulnerability within its channel-messaging architecture. This vulnerability resides in the thread retrieval and message creation APIs.

An authenticated user can bypass intended logical access controls to view restricted message histories and thread context from other channels. The root of this exposure stems from a disjointed authorization model. The application validates permissions on the channel level but fails to assert logical ownership boundaries for referenced message resources.

Consequently, the vulnerability threatens the confidentiality of direct messages and private group conversations within the application instance. Organizations deploying Open WebUI in multi-tenant or multi-user environments are especially susceptible, as internal users may access sensitive interactions of other personnel.

Root Cause Analysis

The root cause of CVE-2026-59215 is a Broken Object Level Authorization (BOLA) flaw in the database lookup routines of backend/open_webui/models/messages.py. The routing layer handles incoming requests to retrieve message threads using the endpoint /api/v1/channels/{id}/messages/{message_id}/thread. At this layer, the server verifies that the requesting user belongs to the channel specified by {id}.

However, once the router completes this check, it executes get_messages_by_parent_id(channel_id, parent_id). The implementation of this function relies entirely on db.get(Message, parent_id) to load the parent message from the database. It fails to verify if the retrieved Message object actually has a channel_id matching the authorized {id} from the API route.

Similarly, on the message creation path, the handler new_message_handler inside backend/open_webui/routers/channels.py accepts parent and reply identifiers from the user request payload. The backend inserts these values into the database without confirming that the target messages are bound to the current channel. This architectural disconnect allows users to query and link data across separate authorization domains.

Code Analysis

The vulnerability is fixed in Open WebUI commit a66477b7104c5d141ce7bffaea424b43e7666ef1 by enforcing strict boundary assertions. In the vulnerable code path inside backend/open_webui/models/messages.py, the thread loading routine returned any existing message record regardless of its relationship to the requested channel:

# Vulnerable Implementation
async def get_messages_by_parent_id(channel_id: str, parent_id: str, ...):
    async with get_async_db_context(db) as db:
        message = await db.get(Message, parent_id)
        if not message:
            return []

The patch addresses this issue by introducing a validation condition that checks whether the parent message is associated with the channel specified in the API path. If the channel IDs do not match, the system rejects the lookup and returns an empty list:

# Patched Implementation
async def get_messages_by_parent_id(
    channel_id: str,
    parent_id: str,
    limit: Optional[int] = None,
    db: AsyncSession = None,
) -> list[MessageModel]:
    async with get_async_db_context(db) as db:
        message = await db.get(Message, parent_id)
        # Thread parent must belong to the requested channel; never disclose a foreign-channel message.
        if not message or message.channel_id != channel_id:
            return []

Additionally, the message creation handler in backend/open_webui/routers/channels.py is updated to prevent cross-channel thread binding. The patched code verifies that the referenced message identifiers specified as parent_id or reply_to_id belong to the same channel context:

# Thread parent / reply target must belong to this channel (no cross-channel binding).
for ref_id in (form_data.parent_id, form_data.reply_to_id):
    if ref_id:
        ref = await Messages.get_message_by_id(ref_id, include_thread_replies=False, db=db)
        if not ref or ref.channel_id != channel.id:
            raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT())

Exploitation Methodology

An attacker must meet specific requirements to exploit this vulnerability. The primary constraint is that the attacker must have valid authenticated access to the target Open WebUI instance. Furthermore, the attacker must have read permissions for at least one channel, which we designate as <Attacker_Channel_ID>.

To retrieve a private message from a restricted channel, the attacker must supply the victim's target message identifier, <Victim_Message_ID>. In installations where message identifiers are sequential, the attacker can systematically sweep the ID space. If the system uses randomized identifiers, exploitation requires a secondary side-channel leak or predictive context.

The attacker issues a crafted HTTP GET request to their own authorized channel endpoint, but specifies the victim's message identifier in the message path. The routing logic passes the permission check because the attacker owns the channel in the path, while the database retrieves and returns the victim's message details.

GET /api/v1/channels/<Attacker_Channel_ID>/messages/<Victim_Message_ID>/thread HTTP/1.1
Host: target-openwebui.local
Authorization: Bearer <Attacker_JWT_Token>

Impact Assessment

The security impact of CVE-2026-59215 is classified as Low on the standard CVSS scale, primarily because of the high attack complexity involved in guessing or acquiring valid target message identifiers. The base score of 3.1 is calculated with the vector CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N. This score reflects low confidentiality impact, with no direct integrity or availability compromise.

Despite the Low severity rating, the real-world impact inside a shared environment can be considerable. An attacker who successfully guesses or extracts active message IDs can reconstruct entire conversation contexts, read sensitive documents, and expose proprietary metadata. This constitutes a direct breakdown of multi-tenant isolation boundaries.

There is no evidence of active exploitation in the wild, and the vulnerability is not listed in CISA's Known Exploited Vulnerabilities catalog. The EPSS score is 0.00255, denoting a very low probability of automated exploitation within 30 days. This is common for logic-based authorization bugs that require specific contextual parameters to exploit.

Remediation and Mitigation

The recommended remediation strategy is to upgrade Open WebUI to version v0.10.0 or later. This release incorporates the official patches that validate channel-binding constraints on both read and write operations, neutralizing both message exposure and cross-channel thread injection.

In scenarios where immediate patching is not feasible, administrators should audit application access logs for anomaly detection. Security teams should monitor for elevated request rates targeting the thread endpoint. Specifically, look for requests to /api/v1/channels/{id}/messages/{message_id}/thread where {id} represents different values for the same authenticated user.

Additionally, developers can configure logging to flag scenarios where the database-resolved channel_id of a message does not match the channel identifier provided in the API route context. This divergence is a strong indicator of unauthorized resource enumeration attempts.

Fix Analysis (1)

Technical Appendix

CVSS Score
3.1/ 10
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N
EPSS Probability
0.26%
Top 83% most exploited

Affected Systems

Open WebUI

Affected Versions Detail

Product
Affected Versions
Fixed Version
Open WebUI
open-webui
< v0.10.0v0.10.0
AttributeDetail
CWE IDCWE-639 (Authorization Bypass Through User-Controlled Key)
Attack VectorNetwork (AV:N)
CVSS v3.1 Score3.1 (Low)
Exploit StatusNone / Proof-of-Concept
Affected Versions< v0.10.0
Fixed Versionv0.10.0

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
CWE-639
Authorization Bypass Through User-Controlled Key

The system fails to restrict access to resources to only authorized users, allowing attackers to access unauthorized resources by modifying the parameter value.

Vulnerability Timeline

Fix commits and pull request developed
2026-06-23
GHSA-73x5-h92w-xc2j and CVE-2026-59215 published
2026-07-09

References & Sources

  • [1]GitHub Security Advisory GHSA-73x5-h92w-xc2j
  • [2]Official Fix Commit
  • [3]Official Pull Request #25766
  • [4]Open WebUI v0.10.0 Release Notes
  • [5]NVD Vulnerability Detail
  • [6]CVEproject Authoritative Entry

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

•40 minutes ago•CVE-2026-59213
3.5

CVE-2026-59213: Authorization Bypass and Cross-Session Cache Leakage in Open WebUI

An authorization bypass and cross-session cache leakage vulnerability exists in the model-listing backend of Open WebUI. The flaw stems from a configuration error in the @cached decorator of the aiocache library, which maps all unique user session queries to a single static cache key.

Alon Barad
Alon Barad
0 views•5 min read
•about 3 hours ago•CVE-2026-59222
6.5

CVE-2026-59222: Sensitive Data Exposure in Open WebUI Channels API

Open WebUI versions starting from 0.7.0 up to, but excluding, 0.10.0 are vulnerable to a sensitive data exposure flaw in the channels API. The GET /api/v1/channels/{id}/members endpoint exposes full user database representations, including private API keys and webhook configurations. This allows authenticated users to extract private credentials of other members within the same channel.

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

CVE-2026-59219: Session Revocation Bypass in Open WebUI Real-Time Endpoints

CVE-2026-59219 identifies a session-revocation bypass vulnerability in Open WebUI versions 0.9.0 through 0.9.99. While standard HTTP REST endpoints enforce stateful JWT revocation using a Redis-backed blacklist, WebSocket and Socket.IO endpoints bypassed these checks. Consequently, a token revoked via sign-out or OIDC logout remains valid for establishing real-time communication channels and accessing server terminal proxies.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 5 hours ago•CVE-2026-59864
9.3

CVE-2026-59864: Critical Out-of-Package Local File Inclusion in Microsoft Kiota

CVE-2026-59864 is a critical path traversal vulnerability in Microsoft Kiota occurring when custom OpenAPI extensions specify a nested static template file. Lack of input sanitization allows malicious inputs to write directory traversal sequences directly into plugin manifests, causing out-of-package local file disclosure in downstream environments like Microsoft 365 Copilot.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 20 hours ago•GHSA-X445-F3H2-J279
7.5

GHSA-X445-F3H2-J279: OAuth Provider Confusion in Auth.js and NextAuth.js

A critical logical security flaw exists in Auth.js (formerly NextAuth.js) where signed anti-CSRF check cookies (state, nonce, and PKCE code_verifier) are not bound to the specific Identity Provider that initiated the authorization flow. In multi-provider environments, this allows an attacker to replay valid, cryptographically signed cookies minted during a flow with one provider against a callback handling a different provider. This vulnerability can lead to session hijacking, identity theft, or unauthorized account linking.

Alon Barad
Alon Barad
7 views•7 min read
•about 21 hours ago•GHSA-7RQJ-J65F-68WH
8.1

GHSA-7RQJ-J65F-68WH: Account Takeover via Homoglyph Bypass in NextAuth.js Email Normalization

A security vulnerability in the email normalization logic of NextAuth.js and Auth.js allows remote attackers to bypass email validation constraints and achieve Account Takeover (ATO) through Unicode homoglyph smuggling. Under standard conditions, Unicode compatibility characters represent visually similar symbols that are normalized downstream to ASCII equivalents, facilitating structural validation bypasses. This issue specifically affects passwordless email authentication flows.

Alon Barad
Alon Barad
8 views•6 min read