Skip to main content

Open WebUI CVE-2026-70481

| EUVDEUVD-2026-52882 MEDIUM
Improper Access Control (CWE-284)
2026-08-04 https://github.com/open-webui/open-webui GHSA-mj5r-jf49-m3w7
5.4
CVSS 3.1 · Vendor: https://github.com/open-webui/open-webui
Share

Severity by source

Vendor (https://github.com/open-webui/open-webui) PRIMARY
5.4 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
vuln.today AI
5.4 MEDIUM

Network API, low complexity; PR:L because authentication plus channel write grant are required; no confidentiality impact since attacker already has read access.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/open-webui/open-webui).

CVSS VectorVendor: https://github.com/open-webui/open-webui

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
Low

Lifecycle Timeline

2
Source Code Evidence Fetched
Aug 04, 2026 - 20:20 vuln.today
Analysis Generated
Aug 04, 2026 - 20:20 vuln.today

DescriptionCVE.org

Summary

On standard channels, the message update and delete handlers accepted any caller holding write access on the channel, without checking that the caller wrote the message. Write access is the same grant a member needs in order to post, so every ordinary participant in a shared channel could rewrite or permanently delete any other participant's messages. The group and direct message branch of the same handlers enforced authorship; the standard branch did not.

Preconditions

Channels are disabled by default and must be enabled by an administrator (ENABLE_CHANNELS). The channel must be a standard channel; group and direct message channels are not affected. The attacker is any authenticated account with role user that holds write access on the channel, whether granted publicly, per user, or through a group. No ownership of the channel, channel manager role, or elevated role is required. Channel and message ids are returned by the listing endpoints the member can already call.

Impact

An ordinary member could replace the content of another member's message while the message stayed attributed to its original author, and could attach arbitrary data and meta payloads to it through the same form. The member could also permanently delete other members' messages, up to the entire visible history of the channel. This is an integrity and availability loss against other users of the channel: content can be forged under a colleague's name and records can be destroyed. It reaches no further than channels the attacker already has write access to, and it discloses nothing the attacker could not already read as a member. Pinning is unaffected and is not part of this issue.

Fix

Fixed in c609ec411 (#27197), released in 0.11.0. Both handlers now apply the same authorship check the group and direct message branch already used, so a non-admin caller can act only on their own messages regardless of write access. Upgrading fully resolves it, with no configuration change required.

Root cause

Affected components:

  • backend/open_webui/routers/channels.py, update_message_by_id (POST /api/v1/channels/{id}/messages/{message_id}/update)
  • backend/open_webui/routers/channels.py, delete_message_by_id (DELETE /api/v1/channels/{id}/messages/{message_id}/delete)

Both handlers branch on channel type, and the two branches asked different questions. The group and direct message branch asked whether the caller wrote the message. The standard branch asked whether the caller is allowed to write in the channel, which is a permission level, not an identity. Those are not interchangeable: posting a message runs that same write check, so the grant that lets a member participate was silently accepted as the grant to rewrite and remove everyone else's content, and every ordinary participant satisfied it. The model layer looks messages up by primary key alone, so the router branch was the only authorization that ran.

Proof of concept

Reported with a script that runs end to end against a live instance. An administrator seeds the accounts and a standard channel granting read and write; everything after that is performed by a separate plain user account in no group that owns neither the channel nor any of the messages. That account edits a victim's message, attaches structured payloads to it, and deletes a second victim message, all returning 200, with the channel history dumped before and after. Controls in the same run confirm the scoping: a read-only member is refused with 403, and a cross-member edit on a group channel is refused with 403.

Credits

@Foxer131 - reported the missing authorship check on the standard-channel update and delete handlers.

AnalysisAI

Broken object-level authorization in Open WebUI's standard channel messaging API allows any authenticated channel member with write access to overwrite or permanently delete messages authored by other members. Affected versions are open-webui 0.5.0 through 0.10.2 (pip). The update_message_by_id and delete_message_by_id route handlers in channels.py enforced a write-permission check for standard channels instead of an authorship check, meaning the same credential that grants posting rights silently granted full edit and delete authority over every other member's messages in that channel. A proof-of-concept script demonstrating end-to-end exploitation was included in the report; no public exploit code is independently confirmed at time of analysis, and the vulnerability is not listed in the CISA KEV catalog.

Technical ContextAI

Open WebUI is a self-hosted AI interface (pip package open-webui) that includes a channel-based messaging system governed by the ENABLE_CHANNELS runtime flag. The affected code lives in backend/open_webui/routers/channels.py, specifically the POST /api/v1/channels/{id}/messages/{message_id}/update and DELETE /api/v1/channels/{id}/messages/{message_id}/delete endpoints. CWE-284 (Improper Access Control) is the root cause: the route handlers branch on channel type and ask different authorization questions per branch. For group and direct-message channels the branch correctly checked caller identity against message.user_id; for standard channels it evaluated only whether the caller holds write permission on the channel - a permission level, not an identity assertion. Because write permission is the same grant issued to every ordinary channel participant, any member who could post also passed the authorization gate for editing and deleting messages they did not author. The model layer performs message lookups by primary key only, so the router branch was the sole authorization point for those operations. Structured data and meta payloads could also be injected through the same update handler, enabling message forgery under the victim's attributed authorship.

RemediationAI

Upgrade to open-webui 0.11.0 or later; this fully resolves the issue with no configuration change required, as confirmed by the vendor advisory at https://github.com/open-webui/open-webui/security/advisories/GHSA-mj5r-jf49-m3w7 and the merged fix commit c609ec41154fa092fa0af80d9d365de06b666286 (PR #27197). If an immediate upgrade is not feasible, the most effective compensating control is to disable the channels feature entirely by setting ENABLE_CHANNELS to false in the administrator configuration - this removes the attack surface entirely but also removes channel functionality for all users. If channels must remain active, administrators should audit which accounts hold write access to standard channels and restrict grants to the minimum necessary set; this narrows the attacker population but does not eliminate the flaw. Downgrading to a version below 0.5.0 is not a practical option given the feature dependency on the affected range.

Share

CVE-2026-70481 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy