CVE-2026-59215: Open WebUI: Private channel messages can be disclosed through cross-channel thread parent_id binding
Summary
A normal authenticated user can read the content of a message in a private channel they do not belong to. GET /api/v1/channels/{id}/messages/{messageid}/thread authorizes the caller against the URL channel, but the underlying thread lookup loads the thread parent by id and returns it without verifying the parent belongs to that channel. By requesting a thread in a channel they can access while supplying a victim channel's message id as the thread root, the attacker receives the victim message — content, channel id, and author.
Affected component
- backend/openwebui/models/messages.py — getmessagesbyparentid() - backend/openwebui/routers/channels.py — getchannelthreadmessages() (read), newmessagehandler() (parent/reply binding on write)
Root cause
getmessagesbyparentid(channelid, parentid) filters the thread replies by channelid, but loads the thread parent by id alone and appends it without requiring parent.channelid == channelid:
python message = await db.get(Message, parentid) # loaded by id only — no channel binding if not message: return [] replies are filtered by channelid ... if len(allmessages) < limit: allmessages.append(message) # parent appended unconditionally
getchannelthreadmessages() authorizes only the URL channel, then calls getmessagesbyparentid(id, messageid) with the caller-supplied messageid. The reply insert path (newmessagehandler → insertnewmessage) also stored a caller-supplied parentid without binding it to the channel.
Impact
A non-member can disclose the content (plus channel id and author metadata) of a private-channel message whose id they know or obtain. Direct reads of the victim channel/message/thread return 403; the disclosure is via the thread parent of a channel the attacker can access. Read-only, one message per known id.
Proof of Concept
(reporter) Validated on v0.9.6: GET /channels/{attackerchannel}/messages/{victimmessageid}/thread returned the victim's private message — content, victim channel id, and author — although direct reads of the victim channel returned 403.
Fix
Bind the thread parent to the requested channel: getmessagesbyparentid returns [] unless the parent exists and parent.channelid == channelid. Defence-in-depth on the write path: newmessagehandler rejects a supplied parentid/replytoid whose message does not belong to the URL channel.
Affected / Patched
- Affected: < 0.10.0 (last affected release 0.9.6) - Patched: v0.10.0 (PR #25766). getmessagesbyparentid binds the thread parent to the requested channel (returns [] unless parent.channelid == channelid), and newmessagehandler rejects a caller-supplied parentid/replytoid whose message does not belong to the channel.
Other sources
Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform. Prior to 0.10.0, channel thread parent and reply handling did not bind parentid to the channel in the URL, allowing an authenticated user to reference a message from another private or DM channel and disclose thread context across channels. This issue is fixed in version 0.10.0.
— 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.10.0 - Upgrade
Upgrade
open_webuito a version that resolves this vulnerability.Fixed in v0.10.0Patch PR #25766
Event History
Frequently Asked Questions
What is the severity of CVE-2026-59215?
CVE-2026-59215 has a severity rating of low, with a score of 3.1.
What type of vulnerability is CVE-2026-59215?
CVE-2026-59215 is a vulnerability that allows for the disclosure of private channel messages through improper binding of the parent_id.
How do I fix CVE-2026-59215?
To fix CVE-2026-59215, update Open WebUI to version 0.10.0 or later where the issue has been addressed.
What software does CVE-2026-59215 affect?
CVE-2026-59215 affects the Open WebUI software prior to version 0.10.0.
What are the potential impacts of CVE-2026-59215?
The potential impact of CVE-2026-59215 includes the risk of private or direct message content being disclosed to authenticated users.